WordPress Plugins

Azure DevOps: Streamlining Software Development For Success

With Azure DevOps at the forefront, this platform revolutionizes the way software development projects are managed, offering a seamless integration of tools and services for enhanced efficiency and collaboration.

From setting up projects to managing workflows and integrating with third-party tools, Azure DevOps provides a comprehensive solution for teams looking to streamline their development processes.

Overview of Azure DevOps

Azure DevOps is a set of development tools used by software development teams to plan, develop, and deliver high-quality products efficiently. Its key components include Azure Boards for work tracking, Azure Repos for version control, Azure Pipelines for continuous integration and delivery, Azure Test Plans for testing, and Azure Artifacts for package management. Azure DevOps streamlines the software development lifecycle by providing an integrated platform for collaboration and automation.

Setting up Azure DevOps

  • Creating a new Azure DevOps project involves navigating to the Azure DevOps portal, selecting the organization, and creating a new project with a unique name and description.
  • Setting up repositories in Azure DevOps allows teams to manage source code, track changes, and collaborate effectively. Repositories can be Git or Team Foundation Version Control (TFVC).
  • Configuring pipelines in Azure DevOps involves defining workflows for building, testing, and deploying applications automatically. Teams can create CI/CD pipelines to streamline the delivery process.
  • Managing boards in Azure DevOps enables teams to track work items, plan sprints, and visualize progress using Kanban boards or Scrum boards.
  • Testing in Azure DevOps can be done using Test Plans, where teams can create test cases, execute tests, and generate reports to ensure software quality.
  • Configuring permissions and security settings in Azure DevOps allows teams to control access to projects, repositories, and pipelines, ensuring data security and compliance.

Managing Projects in Azure DevOps

  • Creating work items in Azure DevOps boards involves defining tasks, user stories, bugs, or epics to track progress and assign work to team members. Work items can be prioritized and organized for efficient project management.
  • Tracking progress and managing sprints in Azure DevOps enables teams to set sprint goals, plan work, and monitor progress using burndown charts, velocity metrics, and sprint backlogs.
  • Using reports and dashboards in Azure DevOps allows teams to visualize project status, track key performance indicators, and make data-driven decisions to optimize project delivery.

Integrating Azure DevOps with Third-Party Tools

  • Integrating Azure DevOps with GitHub for version control enables teams to collaborate on code, track changes, and manage repositories seamlessly.
  • Setting up CI/CD pipelines with Azure DevOps and Docker automates the build, test, and deployment process, ensuring rapid and reliable delivery of applications.
  • Connecting Azure DevOps with Slack facilitates team communication, collaboration, and notification management, enhancing productivity and visibility across projects.

Advanced Features and Customizations in Azure DevOps

  • Using Azure DevOps extensions enhances functionality by adding custom features, integrations, or tools to tailor the platform to specific project requirements.
  • Customizing work item types and processes in Azure DevOps allows teams to adapt the platform to their unique workflows, fields, and states to improve project tracking and reporting.
  • Automating workflows using Azure DevOps REST APIs and PowerShell scripts enables teams to create custom automation scripts, integrate with external systems, and streamline repetitive tasks for increased efficiency.

Azure DevOps Services

Azure DevOps provides a variety of services to support the software development lifecycle, including project planning, version control, build and release management, testing, and monitoring.

Azure Boards

Azure Boards is a service that enables teams to plan, track, and discuss work across teams. It includes features such as backlogs, sprint planning, task boards, and customizable dashboards. For example, a development team can use Azure Boards to create user stories, track progress, and prioritize work items for each sprint.

Azure Repos

Azure Repos is a version control service that allows teams to securely store and manage code repositories. It supports both Git and Team Foundation Version Control (TFVC) systems. Teams can collaborate on code, review changes, and ensure code quality using pull requests. For instance, a team can use Azure Repos to store and manage their code base, track changes, and merge code changes from different team members.

Azure Pipelines

Azure Pipelines is a continuous integration and continuous delivery (CI/CD) service that automates the build, test, and deployment of code to various environments. It supports integration with multiple platforms and languages, enabling teams to build, test, and deploy code efficiently. For example, a team can use Azure Pipelines to automate the build process, run tests, and deploy code to production with minimal manual intervention.

Azure Test Plans

Azure Test Plans is a testing service that allows teams to create, manage, and run manual and exploratory tests. It provides tools for test case management, test execution, and defect tracking. Teams can ensure code quality by running tests and tracking bugs throughout the development lifecycle. For instance, a QA team can use Azure Test Plans to create test cases, execute tests, and report bugs for further investigation.

Azure Artifacts

Azure Artifacts is a package management service that allows teams to create, host, and share packages. It supports multiple package types, such as npm, Maven, NuGet, and Python packages. Teams can store and manage dependencies, artifacts, and packages in a centralized repository. For example, a team can use Azure Artifacts to store and share libraries, packages, and artifacts across projects and teams.

Azure Repos

Azure Repos is a version control service provided by Azure DevOps that allows developers to securely store, manage, and collaborate on their code in a centralized repository. It supports both Git and Team Foundation Version Control (TFVC) to cater to different project needs.

Functionality of Azure Repos for Version Control

  • Track changes: Azure Repos tracks changes made to code files, allowing developers to view previous versions and revert if needed.
  • Branching and merging: Developers can create branches to work on new features or fixes independently and later merge them back to the main branch.
  • Code reviews: Teams can conduct code reviews and ensure code quality through peer feedback before merging changes.
  • Pull requests: Developers can create pull requests to propose changes, discuss them with team members, and merge them after approval.

Best Practices for Managing Code Repositories in Azure DevOps

  • Organize repositories logically based on projects or modules to keep code structured and easily accessible.
  • Use branching strategies like GitFlow to manage feature development, releases, and hotfixes effectively.
  • Leverage branch policies to enforce code quality checks, such as requiring code reviews and passing automated tests before merging changes.

Creating a New Code Repository in Azure Repos – Step by Step Guide

  1. Go to Azure DevOps project and select Repos from the menu.
  2. Click on New Repository and provide a name, description, and select Git or TFVC as the version control type.
  3. Set repository permissions and initialize the repository with a README file if needed.
  4. Click Create to finalize the creation of the new code repository.

Branching and Merging Code in Azure Repos

  • Developers can create branches in Azure Repos to work on separate tasks without affecting the main codebase.
  • After completing the changes, they can merge the branches back into the main branch using pull requests.
  • Resolve any merge conflicts that may arise during the merging process to ensure code integrity.

Setting up Branch Policies in Azure Repos for Code Quality Control

  • Branch policies can enforce code quality standards by requiring specific criteria to be met before changes are merged.
  • Common policies include requiring code reviews, passing automated tests, and maintaining a clean commit history.
  • By setting up branch policies, teams can ensure that only high-quality code is merged into the main branch.

Integrating Azure Repos with Azure Pipelines for Automated Build and Deployment

  • Azure Repos can be seamlessly integrated with Azure Pipelines to automate the build and deployment processes of code changes.
  • Developers can set up build pipelines to compile, test, and package the code automatically whenever changes are pushed to the repository.
  • Deployment pipelines can then deploy the built artifacts to various environments for testing and production releases.

Code Reviews and Pull Requests in Azure Repos for Collaboration and Code Quality Assurance

  • Code reviews in Azure Repos allow team members to provide feedback on code changes, identify issues, and suggest improvements.
  • Pull requests enable developers to submit their changes for review, discuss them with the team, and ensure code quality before merging.
  • By leveraging code reviews and pull requests, teams can collaborate effectively, share knowledge, and maintain high standards of code quality in their projects.

Azure Pipelines

Azure Pipelines is a cloud service offered by Azure DevOps that automates the building, testing, and deployment of code to various platforms. It plays a crucial role in the Continuous Integration/Continuous Deployment (CI/CD) process by enabling teams to implement a streamlined and efficient software delivery pipeline.

Creating and Configuring Pipelines

Azure Pipelines allows users to create and configure pipelines by defining the steps needed for building, testing, and deploying applications. This includes setting up triggers to automatically start a pipeline, configuring agents to run the pipeline jobs, and defining environments where the code will be deployed.

  • Triggers: Users can set up triggers based on code commits, pull requests, or scheduled builds to initiate pipeline runs.
  • Agents: Agents are used to execute jobs in the pipeline, and users can configure self-hosted or Microsoft-hosted agents based on their requirements.
  • Environments: Environments represent the target platforms where the code will be deployed, allowing users to define deployment strategies and approvals.

Integration with Azure DevOps Services

Azure Pipelines seamlessly integrates with other Azure DevOps services like Azure Repos, Azure Artifacts, and Azure Boards to provide a comprehensive DevOps solution.

  • Azure Repos: Users can link their pipelines to Azure Repos to automatically trigger builds on code changes and track the build status in the repository.
  • Azure Artifacts: Pipelines can publish and consume artifacts from Azure Artifacts, enabling the sharing of dependencies across different pipeline stages.
  • Azure Boards: Integration with Azure Boards allows for tracking work items, linking them to pipeline runs, and monitoring the progress of development tasks.

Adding and Managing Tasks

In Azure Pipelines, users can add and manage tasks within pipeline jobs to customize the build and deployment process according to their specific requirements.

  • Predefined Tasks: Azure Pipelines provides a wide range of predefined tasks for common operations like copying files, running scripts, and publishing artifacts.
  • Custom Tasks: Users can create custom tasks using scripts or extensions to perform unique actions tailored to their project needs.

Monitoring and Troubleshooting Pipeline Runs

Monitoring and troubleshooting pipeline runs is essential to ensure the reliability and efficiency of the CI/CD process in Azure Pipelines.

  • Viewing Logs: Users can view detailed logs of each pipeline run to track the execution of tasks, identify errors, and analyze performance.
  • Handling Failures: Azure Pipelines provides tools for handling build failures, including re-running failed jobs, investigating error messages, and debugging issues to ensure successful pipeline runs.

Azure Boards

Azure Boards is a project management tool in Azure DevOps that allows teams to plan, track, and discuss work across a project. It provides a centralized platform for managing work items, tracking progress, and collaborating with team members effectively.

Features of Azure Boards

  • Work Item Tracking: Azure Boards offers various types of work items to track different aspects of a project such as user stories, tasks, bugs, and epics.
  • Customizable Boards: Teams can create custom boards to visualize and prioritize work items based on their specific requirements.
  • Backlogs and Sprints: Azure Boards supports agile methodologies by providing backlogs for long-term planning and sprints for short-term execution.
  • Integration with Azure Repos and Pipelines: Azure Boards seamlessly integrates with Azure Repos for source code management and Azure Pipelines for continuous integration and deployment.

Types of Work Items in Azure Boards

  • User Stories: Descriptions of functionality from an end-user perspective.
  • Tasks: Breakdown of user stories into actionable tasks for team members.
  • Bugs: Tracking and resolving issues identified during development or testing.
  • Epics: Large bodies of work that can be broken down into smaller user stories or tasks.

Tips for Effective Project Management using Azure Boards

  • Define Clear Work Item Descriptions: Ensure each work item is clearly defined with details, acceptance criteria, and priorities.
  • Use Iterative Planning: Break down work items into smaller tasks and plan sprints for incremental progress.
  • Collaborate and Communicate: Encourage team members to discuss work items, provide updates, and raise any blockers or issues.
  • Monitor Progress: Regularly review boards, track progress, and make adjustments to ensure project milestones are met.

Azure Test Plans

Azure Test Plans in Azure DevOps serve the crucial role of facilitating software testing within the development process. By providing a centralized platform for creating, managing, and executing test plans, teams can ensure the quality and reliability of their software products before deployment.

Creating and Executing Test Plans

When creating a test plan in Azure DevOps, teams can define test suites, test cases, and test configurations to cover various scenarios and requirements. Testers can then execute these test plans manually or automate them for efficiency. The results and feedback are captured within Azure DevOps, allowing for easy tracking and collaboration among team members.

  • Define test suites, cases, and configurations based on project requirements.
  • Execute test plans manually or automate them for continuous testing.
  • Capture and track results, feedback, and issues within Azure DevOps.

Integration with Azure Pipelines

Azure Test Plans seamlessly integrate with Azure Pipelines to enable end-to-end testing and validation of software builds. Testers can trigger test runs as part of the build and release pipelines, ensuring that new code changes are thoroughly tested before deployment. This integration streamlines the testing process and promotes collaboration between development and testing teams.

  • Trigger test runs within the build and release pipelines of Azure Pipelines.
  • Ensure thorough testing of new code changes before deployment.
  • Promote collaboration between development and testing teams for effective quality assurance.

Azure Artifacts

Azure Artifacts plays a crucial role in package management within Azure DevOps, providing a centralized location to store and share packages across projects and teams. This helps streamline the process of managing dependencies and simplifies the overall development workflow.

Creating and Publishing Packages

  • To create packages in Azure Artifacts, you can use various package types such as npm, NuGet, Maven, and more, depending on the technology stack of your project.
  • Once the package is created, you can easily publish it to Azure Artifacts, making it accessible to other team members and projects within your organization.
  • By leveraging Azure Artifacts, you can ensure that your packages are versioned, secure, and readily available for consumption, promoting reusability and consistency across projects.

Managing Dependencies

  • When managing dependencies with Azure Artifacts, it is essential to establish clear naming conventions and versioning strategies to avoid conflicts and ensure compatibility.
  • Regularly review and update dependencies to incorporate the latest features, bug fixes, and security patches, reducing technical debt and enhancing project stability.
  • Utilize feed views and permissions in Azure Artifacts to control access to packages based on roles and responsibilities, maintaining a secure and organized package repository.

Azure DevOps Extensions

Extensions play a crucial role in enhancing the functionality of Azure DevOps services, allowing users to customize their workflows according to their specific needs.

Popular Extensions in Azure DevOps Marketplace

  • SonarQube: A popular code quality extension that helps developers identify and fix code issues early in the development process.
  • Slack: Integration with Slack for seamless communication and collaboration within teams.
  • Azure Key Vault: Securely store and manage sensitive information such as passwords, certificates, and API keys.
  • Jira Integration: Connect Azure DevOps with Jira for streamlined issue tracking and project management.

Developing Custom Extensions for Azure DevOps

Creating custom extensions for Azure DevOps involves several steps to ensure seamless integration and functionality within projects:

  1. Set up a development environment with the necessary tools and resources.
  2. Create manifest files to define the extension’s properties, capabilities, and requirements.
  3. Package extensions using appropriate tools to prepare them for deployment.
  4. Test the custom extensions in Azure DevOps projects to validate their functionality and compatibility.

Best Practices for Designing and Deploying Custom Extensions

When designing and deploying custom extensions for Azure DevOps, it is essential to follow best practices to ensure optimal performance and compatibility:

  • Adhere to Azure DevOps extension guidelines and best practices to maintain consistency and reliability.
  • Regularly update and maintain custom extensions to address any compatibility issues or security vulnerabilities.
  • Test custom extensions thoroughly in diverse environments to ensure seamless integration and performance.
  • Document the functionality and usage of custom extensions to facilitate easier adoption and troubleshooting.

Azure DevOps Integration

Azure DevOps integration plays a crucial role in streamlining workflows, improving collaboration, and enhancing productivity. By connecting Azure DevOps with other tools and services, teams can achieve seamless automation, efficient communication, and better visibility into the software development lifecycle.

Importance of Integrating Azure DevOps

Integrating Azure DevOps with other tools and services is essential for creating a connected ecosystem that enables cross-functional teams to work together efficiently. By integrating Azure DevOps, organizations can eliminate silos, reduce manual tasks, and ensure that data flows seamlessly across different platforms.

Common Integration Scenarios with Azure DevOps

  • Integrating Azure DevOps with Jira for synchronized issue tracking and project management.
  • Connecting Azure DevOps with GitHub for seamless code repository management and version control.
  • Integrating Azure DevOps with Slack for real-time communication and collaboration among team members.

Tips for Seamless Integration Workflows in Azure DevOps

Ensure clear communication among team members regarding the integration process and goals.

  • Define clear integration objectives and establish a roadmap for implementation.
  • Regularly monitor and test the integration to identify and address any issues promptly.
  • Provide adequate training and support to team members to ensure smooth adoption of integrated workflows.

Setting up Integration between Azure DevOps and Popular Tools

To set up integration between Azure DevOps and tools like Jira, GitHub, or Slack, follow these general steps:

  1. Access the Azure DevOps service connections settings.
  2. Create a new service connection for the desired tool (e.g., Jira, GitHub, or Slack).
  3. Configure the connection settings with the necessary authentication details.
  4. Test the connection to ensure successful integration.

Comparison Table of Integrating Azure DevOps with Different Tools

Tool Benefits
Jira Synced issue tracking and project management
GitHub Seamless code repository management and version control
Slack Real-time communication and collaboration

Troubleshooting Tips for Integration Issues

  • Double-check authentication credentials and connection settings.
  • Review logs and error messages to pinpoint the root cause of integration failures.
  • Consult documentation or community forums for common integration issues and solutions.

Best Practices for Maintaining and Optimizing Integrations in Azure DevOps

  • Regularly review and update integration configurations to align with evolving requirements.
  • Implement automated testing and monitoring to ensure the reliability of integrated workflows.
  • Document integration processes and dependencies for future reference and troubleshooting.

Azure DevOps Security

Azure DevOps takes security seriously to protect sensitive data and ensure compliance with regulations. Setting up secure access controls is crucial to maintaining the integrity of your projects and preventing unauthorized access.

Secure Access Controls in Azure DevOps

To set up secure access controls in Azure DevOps, you can utilize role-based access control (RBAC) to manage permissions for users and teams. By defining roles with specific permissions, you can control who can view, edit, or delete certain resources within your projects. This helps prevent unauthorized users from accessing sensitive information and ensures that only authorized personnel can make changes.

  • Utilize RBAC to assign roles and permissions to users and teams
  • Regularly review and update access controls to align with project requirements
  • Employ multi-factor authentication (MFA) to add an extra layer of security
  • Implement Azure Active Directory (AAD) integration for centralized user management

Data Protection and Compliance in Azure DevOps

Protecting data and ensuring compliance with regulations are essential aspects of Azure DevOps security. By following best practices and implementing security measures, you can safeguard your data and mitigate risks of breaches or non-compliance.

  • Encrypt sensitive data at rest and in transit to prevent unauthorized access
  • Regularly monitor and audit user activities to detect any suspicious behavior
  • Implement data loss prevention (DLP) policies to prevent accidental data leaks
  • Ensure compliance with industry regulations and standards, such as GDPR or HIPAA

Azure DevOps Reporting

Azure DevOps provides robust reporting capabilities to track and analyze project progress effectively. With built-in reports and the ability to create custom reports, teams can gain valuable insights into their development processes.

Built-in Reports in Azure DevOps

  • Azure DevOps offers built-in reports such as Burndown, Burnup, Velocity, Cumulative Flow Diagram, and Sprint Summary.
  • These reports help teams visualize sprint progress, identify bottlenecks, and track key metrics for informed decision-making.

Creating Custom Reports

  • To create custom reports in Azure DevOps, users can leverage Power BI integration or utilize the Analytics Service to query and visualize data.
  • Custom reports can be tailored to specific project requirements and KPIs, providing a deeper level of analysis.

Automated Report Generation

  • Teams can schedule automated report generation in Azure DevOps by configuring subscriptions to receive reports via email or setting up automated data refresh in Power BI.
  • This ensures that stakeholders receive timely updates on project progress without manual intervention.

Configuring Report Permissions

  • Administrators can configure permissions for accessing different types of reports in Azure DevOps by managing security settings at the project or organization level.
  • By defining roles and permissions, organizations can control access to sensitive project data and ensure data integrity.

Power BI Integration vs Azure DevOps Native Reporting

  • While Azure DevOps native reporting features offer out-of-the-box reports, Power BI integration provides more advanced visualization and analysis capabilities.
  • Organizations can choose the tool that best suits their reporting needs based on complexity, customization, and data visualization requirements.

Best Practices for Azure DevOps Reporting

  • Regularly review and analyze reports to identify trends, patterns, and areas for improvement in the development process.
  • Ensure that reports are shared with relevant stakeholders to foster transparency and collaboration within the team.

Azure DevOps Best Practices

When using Azure DevOps, it is essential to follow best practices to ensure efficient collaboration and maximize productivity. Below are key strategies and recommendations for optimizing workflows and enhancing performance in Azure DevOps.

Optimizing Workflows

  • Define clear and consistent naming conventions for repositories, pipelines, and work items to maintain organization and clarity.
  • Implement code reviews and pull requests to ensure code quality and facilitate knowledge sharing among team members.
  • Utilize Kanban boards and sprint planning to track progress and prioritize tasks effectively.

Branching Strategies

  • Establish branching policies to control code integration and manage releases efficiently.
  • Consider using feature branches for development, release branches for stabilization, and main branches for production-ready code.
  • Implement branch policies to enforce code quality checks and ensure compliance with coding standards.

Automating Testing Processes

  • Integrate automated testing into your pipelines to catch bugs early and improve overall code quality.
  • Leverage Azure Test Plans for manual and exploratory testing to complement automated tests and ensure comprehensive test coverage.
  • Monitor test results and performance metrics to identify areas for improvement and optimize testing processes.

Implementing Security Measures

  • Enable multi-factor authentication and role-based access control to secure your Azure DevOps pipelines and repositories.
  • Regularly scan for vulnerabilities and apply security patches to protect against potential threats and breaches.
  • Utilize Azure DevOps security features such as security alerts and secure pipelines to enhance the overall security posture of your projects.

Monitoring and Performance

  • Set up monitoring and alerting mechanisms to track the performance of your pipelines, builds, and deployments.
  • Analyze performance metrics and identify bottlenecks to optimize resource utilization and enhance overall efficiency.
  • Implement continuous improvement practices based on performance data to refine workflows and ensure consistent delivery of high-quality software.

Azure DevOps Case Studies

When it comes to real-world examples of successful implementation of Azure DevOps, several companies stand out for their innovative use of this platform. These case studies provide valuable insights into the impact of Azure DevOps on project outcomes and highlight the lessons learned and best practices that can be applied in different industries.

Company A: Streamlining Development Processes

  • Company A, a leading tech firm, successfully implemented Azure DevOps to streamline their development processes and improve collaboration among teams.
  • By utilizing Azure Repos and Azure Pipelines, they were able to automate their build and deployment processes, resulting in faster delivery of high-quality software.
  • Through the use of Azure Boards, they effectively managed their project tasks and backlog, ensuring better visibility and tracking of progress.
  • Overall, Company A saw a significant improvement in project outcomes, with reduced time-to-market and increased productivity.

Company B: Enhancing DevOps Practices

  • Company B, a financial services firm, leveraged Azure DevOps to enhance their DevOps practices and achieve greater efficiency in software development.
  • By incorporating Azure Test Plans into their workflow, they were able to conduct comprehensive testing and ensure the quality of their applications before deployment.
  • With Azure Artifacts, they centralized their package management and improved the traceability of artifacts throughout the development lifecycle.
  • Company B’s adoption of Azure DevOps led to improved collaboration, faster delivery cycles, and better alignment between development and operations teams.

Company C: Scaling Agile Development

  • Company C, a healthcare organization, successfully scaled their agile development practices with the help of Azure DevOps.
  • By utilizing Azure DevOps Extensions, they customized their toolchain to meet the specific needs of their development teams and improve overall efficiency.
  • With Azure DevOps Integration, they seamlessly connected their existing tools and systems, creating a unified and integrated development environment.
  • Company C’s experience with Azure DevOps demonstrated the importance of adaptability and continuous improvement in achieving successful project outcomes.

Azure DevOps Future Trends

As technology continues to evolve rapidly, Azure DevOps is also adapting to the changing landscape of software development. Let’s explore some emerging trends and potential advancements that could shape the future of Azure DevOps.

Cloud-native Development

One of the key trends in Azure DevOps is the shift towards cloud-native development. With more organizations embracing cloud technologies, Azure DevOps is likely to prioritize features and tools that support cloud-native applications and microservices architecture.

AI and Machine Learning Integration

Integrating AI and machine learning capabilities into Azure DevOps tools can provide valuable insights and automation opportunities for developers. Expect to see advancements in this area to streamline development processes and improve productivity.

Enhanced Security Features

With cybersecurity threats on the rise, Azure DevOps will likely focus on enhancing security features to protect sensitive data and code repositories. This could include improved authentication mechanisms, encryption standards, and vulnerability scanning tools.

DevOps for IoT and Edge Computing

As Internet of Things (IoT) and edge computing technologies gain prominence, Azure DevOps may expand its capabilities to support development for these platforms. Look out for tools and integrations that cater to the unique requirements of IoT and edge computing projects.

Ultimate Conclusion

In conclusion, Azure DevOps emerges as a game-changer in the realm of software development, empowering teams to work smarter, faster, and with greater precision. By leveraging its advanced features and customizations, organizations can enhance their project management capabilities and drive success in the digital age.

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button