Updated Azure Stack Documentation, Git Pages Links and Packages (#125)
* Updated documentation with new naming conventions and links * Updated all Azure Stack docs with new image links for Git Pages structure * Updated Broken Table Formatting * Update Packages with Disclaimers
|
@ -1,39 +0,0 @@
|
|||
# Deploying the Parts Unlimited MRP App via Puppet in Azure
|
||||
In this hands-on lab, you will deploy a Java app, the Parts Unlimited MRP App, using Puppet from [PuppetLabs](https://puppetlabs.com/). Puppet is a configuration
|
||||
management system that allows you to automate provisioning and configuration of machines by describing the state of your infrastructure
|
||||
as code. Infrastructure as Code is an important pillar of good DevOps.
|
||||
|
||||
## Prerequisites
|
||||
- An SSH client such as PuTTY
|
||||
- An Azure subscription
|
||||
|
||||
## Tasks
|
||||
|
||||
In this lab you will work with two machines: a Puppet Master machine and another machine known as a _node_
|
||||
which will host the MRP application. The only task you will perform on the node is to install the Puppet
|
||||
agent - the rest of the configuration will be applied by instructing Puppet how to configure the node
|
||||
though _puppet programs_ on the Puppet Master.
|
||||
|
||||
1. Provisioning a Puppet Master and node (both Ubuntu VMs) in Azure using ARM templates
|
||||
1. Install Puppet Agent on the node
|
||||
1. Configure the Puppet Production Environment
|
||||
1. Test the Production Environment Configuration
|
||||
1. Create a Puppet program to describe the environment for the MRP application
|
||||
|
||||
## Task 1: Provision the Lab
|
||||
|
||||
1. Provision the Lab machines using an Azure Resource Manager (ARM) Template
|
||||
|
||||
This lab calls for the use of two machines. The Puppet Master server must be a Linux machine, but the puppet
|
||||
agent can run on Linux or Windows. For this lab, the _node_ that we will be configuring is an Ubuntu VM.
|
||||
|
||||
Instead of manually creating the VMs in Azure, we are going to use an Azure Resource Management (ARM) template.
|
||||
|
||||
The VMs will be deployed to a Resource Group along with a virtual network (VNET) and some other required resources. You can
|
||||
delete the resource group in order to remove all the created resources at any time.
|
||||
|
||||
![](<media/1.jpg>)
|
||||
|
||||
```
|
||||
partspuppetmaster.nqkkrckzqwwu1p5pu4ntvzrona.cx.internal.cloudapp.net
|
||||
```
|
|
@ -1 +0,0 @@
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"publisherDisplayName": "Chef",
|
||||
"summary": "Chef Server 12 on Ubuntu 16.04-LTS VM, pre-configured and ready to run on Azure Stack",
|
||||
"longSummary": "Chef Server 12 on Ubuntu 16.04-LTS VM, pre-configured and ready to run on Azure Stack",
|
||||
"description": "<p>Whether you have five or five thousand servers, Chef lets you manage them all by turning infrastructure into code. Infrastructure described as code is flexible, versionable, human-readable, and testable.</p><p>Whether your infrastructure is in the cloud, on-premises or in a hybrid environment, you can easily and quickly adapt to your business’s changing needs with Chef</p><p>The Chef Server acts as a central repository for cookbooks as well as for information about every node it manages. Chef cookbooks contain code that describes the desired state of your infrastructure</p><p>For more information, review the links below.</p>",
|
||||
"description": "<p>Whether you have five or five thousand servers, Chef lets you manage them all by turning infrastructure into code. Infrastructure described as code is flexible, versionable, human-readable, and testable.</p><p>Whether your infrastructure is in the cloud, on-premises or in a hybrid environment, you can easily and quickly adapt to your business’s changing needs with Chef</p><p>The Chef Server acts as a central repository for cookbooks as well as for information about every node it manages. Chef cookbooks contain code that describes the desired state of your infrastructure</p><p>For more information, review the links below.</p><p><b>Please Note</b> - This image is not officially provided by, or supported by Chef and is provided solely for use with the Parts Unlimited MRP Hands-on-Labs. All logos and images are property of Chef</p>",
|
||||
"documentationLink": "Chef",
|
||||
"documentationLink2": "Chef Documentation"
|
||||
}
|
|
@ -3,7 +3,7 @@
|
|||
"publisherDisplayName": "The Jenkins Project",
|
||||
"summary": "Jenkins on Ubuntu 16.04-LTS VM, pre-configured and ready to run on Azure Stack",
|
||||
"longSummary": "Jenkins on Ubuntu 16.04-LTS VM, pre-configured and ready to run on Azure Stack",
|
||||
"description": "<p>The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project.</p><p>This VM contains the latest version of Jenkins, running on Ubuntu 14.04-LTS, configured as a single, standalone installation and will allow you to get started learning and understanding key Jenkins tasks.</p><p>For more information, review the links below.</p>",
|
||||
"description": "<p>The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project.</p><p>This VM contains the latest version of Jenkins, running on Ubuntu 16.04-LTS, configured as a single, standalone installation and will allow you to get started learning and understanding key Jenkins tasks.</p><p>For more information, review the links below.</p><p><b>Please Note</b> - This image is not officially provided by, or supported by Cloudbees or the Jenkins Community and is provided solely for use with the Parts Unlimited MRP Hands-on-Labs.</p>",
|
||||
"documentationLink": "The Jenkins Project",
|
||||
"documentationLink2": "Jenkins Documentation"
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"publisherDisplayName": "Puppet",
|
||||
"summary": "Puppet Enterprise on Ubuntu 16.04-LTS VM, pre-configured and ready to run on Azure Stack",
|
||||
"longSummary": "Puppet Enterprise on Ubuntu 16.04-LTS VM, pre-configured and ready to run on Azure Stack",
|
||||
"description": "<p>Puppet Enterprise lets you automate the entire lifecycle of your Azure infrastructure, simply, scalably, and securely, from initial provisioning through application deployment.</p><p>After you set up your Puppet Master, you can start automating common tasks, such as provisioning VMs, deploying an IIS site, and configuring a SQL server database.</p><p>For more information, review the links below.</p>",
|
||||
"description": "<p>Puppet Enterprise lets you automate the entire lifecycle of your Azure infrastructure, simply, scalably, and securely, from initial provisioning through application deployment.</p><p>After you set up your Puppet Master, you can start automating common tasks, such as provisioning VMs, deploying an IIS site, and configuring a SQL server database.</p><p>For more information, review the links below.</p><p><b>Please Note</b> - This image is not officially provided by, or supported by Puppet and is provided solely for use with the Parts Unlimited MRP Hands-on-Labs. All logos and images are property of Puppet</p>",
|
||||
"documentationLink": "Puppet Enterprise",
|
||||
"documentationLink2": "Puppet Documentation"
|
||||
}
|
|
@ -3,6 +3,6 @@
|
|||
"publisherDisplayName": "Canonical",
|
||||
"summary": "Ubuntu Server delivers the best value scale-out performance available.",
|
||||
"longSummary": "Ubuntu Server delivers the best value scale-out performance available.",
|
||||
"description": "<p>Ubuntu Server is the world's most popular Linux for cloud environments.</p><p>Updates and patches for Ubuntu 14.04 LTS will be available until 2019-04-17.</p><p>Ubuntu Server is the perfect virtual machine (VM) platform for all workloads from web applications to NoSQL databases and Hadoop</p>",
|
||||
"description": "<p>Ubuntu Server is the world's most popular Linux for cloud environments.</p><p>Updates and patches for Ubuntu 14.04 LTS will be available until 2019-04-17.</p><p>Ubuntu Server is the perfect virtual machine (VM) platform for all workloads from web applications to NoSQL databases and Hadoop.</p><p><b>Please Note</b> - This image is not officially provided by, or supported by Canonical and is provided solely for use with the Parts Unlimited MRP Hands-on-Labs. All logos and images are property of Canonical.</p>",
|
||||
"documentationLink": "Documentation"
|
||||
}
|
|
@ -3,6 +3,6 @@
|
|||
"publisherDisplayName": "Canonical",
|
||||
"summary": "Ubuntu Server delivers the best value scale-out performance available.",
|
||||
"longSummary": "Ubuntu Server delivers the best value scale-out performance available.",
|
||||
"description": "<p>Ubuntu Server is the world's most popular Linux for cloud environments. Updates and patches for Ubuntu 16.04 will be available until April 2021.</p><p>Ubuntu Server is the perfect virtual machine (VM) platform for all workloads from web applications to NoSQL databases and Hadoop</p>",
|
||||
"description": "<p>Ubuntu Server is the world's most popular Linux for cloud environments. Updates and patches for Ubuntu 16.04 will be available until April 2021.</p><p>Ubuntu Server is the perfect virtual machine (VM) platform for all workloads from web applications to NoSQL databases and Hadoop.</p><p><b>Please Note</b> - This image is not officially provided by, or supported by Canonical and is provided solely for use with the Parts Unlimited MRP Hands-on-Labs. All logos and images are property of Canonical</p>",
|
||||
"documentationLink": "Documentation"
|
||||
}
|
|
@ -20,6 +20,7 @@ codeurl: 'https://github.com/Microsoft/PartsUnlimitedMRP'
|
|||
sections: [
|
||||
['FundVSTS', 'Fundamentals using Visual Studio Team Services'],
|
||||
['FundOth', 'Fundamentals using Other Tools'],
|
||||
['AzureStack', 'Fundamentals on Azure Stack'],
|
||||
['Misc', 'Miscellaneous'],
|
||||
['Adv', 'Advanced']
|
||||
]
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
# Getting Started with DevOps on Azure Stack
|
||||
|
||||
---
|
||||
layout: page
|
||||
title: Getting Started with DevOps on Azure Stack
|
||||
category: AzureStack
|
||||
order: 1
|
||||
---
|
||||
In order to get started exploring DevOps tooling on Azure Stack, you're going to need an Azure Stack, and that requires some hardware. If you're not sure what specific hardware you'll need for the single-node POC configuration, don't fear, it's all [documented here](https://docs.microsoft.com/en-us/azure/azure-stack/azure-stack-deploy).
|
||||
|
||||
Once you've sourced your hardware, you'll need to [pull down the package](https://azure.microsoft.com/en-us/overview/azure-stack/try/?v=try), which requires you to complete a short registration form, then download the bits. A word of warning though - it's a big file, so set aside a bit of time for a coffee, or 9.
|
||||
|
@ -8,6 +12,6 @@ With the package safely downloaded, [follow the documentation](https://docs.micr
|
|||
|
||||
Make sure you pay particularly close attention to the portal activation, and also the password expiration configuration, as you don't want your POC machine to expire too soon!
|
||||
|
||||
# Next Step
|
||||
## Next Step
|
||||
|
||||
Once your deployment has completed, we can move on to [connecting to Azure Stack](/deploy/azurestack/docs/connect_to_azurestack.md), and from there, we'll upload some images that you can use with the DevOps tools we'll be deploying.
|
||||
Once your deployment has completed, we can move on to [connecting to Azure Stack](azurestack-32-connect.html), and from there, we'll upload some images that you can use with the DevOps tools we'll be deploying.
|
|
@ -1,8 +1,12 @@
|
|||
# Connecting to Azure Stack
|
||||
|
||||
---
|
||||
layout: page
|
||||
title: Connecting to Azure Stack
|
||||
category: AzureStack
|
||||
order: 2
|
||||
---
|
||||
With your Azure Stack deployed, you should be logged in to the Azure Stack POC host, ready to use the environment. Now, in order to use the environment correctly, you will need to log into the MAS-CON01 virtual machine. This machine is your primary machine for administering, deploying and managing the Azure Stack.
|
||||
|
||||
## Connect with Remote Desktop
|
||||
### Connect with Remote Desktop
|
||||
With a Remote Desktop connection, up to two concurrent (different) users can work with the portal to manage resources. You can also use tools on the MAS-CON01 virtual machine.
|
||||
|
||||
1. Log in to the Azure Stack POC physical machine.
|
||||
|
@ -13,10 +17,10 @@ With a Remote Desktop connection, up to two concurrent (different) users can wor
|
|||
|
||||
Once you've successfully connected, you're free to explore the Azure Stack environment.
|
||||
|
||||
## Connect with a VPN
|
||||
### Connect with a VPN
|
||||
Virtual Private Network connections let multiple concurrent users connect from clients outside of the Azure Stack infrastructure. You can use the portal to manage resoures. You can also use tools, such as Visual Studio and PowerShell, on your local client. If you require a VPN connection to connect to your Azure Stack, please [refer to the documentation](https://docs.microsoft.com/en-us/azure/azure-stack/azure-stack-connect-azure-stack).
|
||||
|
||||
## Update Internet Explorer Enhanced Security Configuration
|
||||
### Update Internet Explorer Enhanced Security Configuration
|
||||
|
||||
It's easier if you do this now, rather than later. It'll make things easier when accessing Azure Stack both programmatically, and via the Portal.
|
||||
|
||||
|
@ -25,6 +29,6 @@ It's easier if you do this now, rather than later. It'll make things easier when
|
|||
3. In the Internet Explorer Enhanced Security Configuration window, for Administrators, select **Off** and click **OK**.
|
||||
4. Close Server Manager.
|
||||
|
||||
# Next Step
|
||||
## Next Step
|
||||
|
||||
In the next step, we'll [add a new VM image](/deploy/azurestack/docs/adding_vm_images.md), that we'll use for our ongoing tasks to evaluate key DevOps tooling on Azure Stack.
|
||||
In the next step, we'll [add a new VM image](azurestack-33-images.html), that we'll use for our ongoing tasks to evaluate key DevOps tooling on Azure Stack.
|
|
@ -1,10 +1,14 @@
|
|||
# Adding VM Images to Azure Stack
|
||||
|
||||
---
|
||||
layout: page
|
||||
title: Adding VM Images to Azure Stack
|
||||
category: AzureStack
|
||||
order: 3
|
||||
---
|
||||
Azure Stack enables administrators to make VM images, such as their organization’s custom VHD, available to their tenants. Images can be referenced by Azure Resource Manager templates or added to the Azure Marketplace UI with the creation of a Marketplace item. No images are included by default in the Azure Stack Technical Preview 3 Refresh.
|
||||
|
||||
An image can be added to your Azure Stack Platform Image Repository (PIR) in 2 ways - via the portal, or programmatically. We'll focus on the programmatical approach, specifically with PowerShell, as it's faster, and more repeatable. Plus, you can copy and paste my code ;-)
|
||||
|
||||
## Downloading an Image
|
||||
### Downloading an Image
|
||||
|
||||
Firstly, you should be **logged into you Azure Stack environment, and specifically, within the MAS-CON01 machine**.
|
||||
|
||||
|
@ -24,11 +28,11 @@ Once downloaded, extract the zip file, to end up with a single 30GB VHD, with th
|
|||
2. Move the file to a new folder called C:\Images
|
||||
3. Optional - to free up space, delete the original ZIP file you just downloaded.
|
||||
|
||||
## Connecting to Azure Stack via PowerShell
|
||||
### Connecting to Azure Stack via PowerShell
|
||||
|
||||
Before we can begin adding an image to the Azure Stack PIR, we'll need to be able to connect to the Azure Stack via PowerShell, and there are a couple of steps we need to perform to do that.
|
||||
|
||||
### Install Azure Stack PowerShell cmdlets & dependencies
|
||||
#### Install Azure Stack PowerShell cmdlets & dependencies
|
||||
1. Azure Stack uses the same AzureRM cmdlets that you'd use if you were connecting to Azure. These are installed from the PowerShell Gallery. To begin, open an elevated (as administrator) PowerShell Console on MAS-CON01 and run the following command to return a list of PowerShell repositories available:
|
||||
|
||||
``` PowerShell
|
||||
|
@ -74,7 +78,7 @@ cd AzureStack-Tools-master\connect
|
|||
Import-Module .\AzureStack.Connect.psm1
|
||||
Set-ExecutionPolicy Unrestricted
|
||||
```
|
||||
### Connect to Azure Stack
|
||||
#### Connect to Azure Stack
|
||||
With the Azure Stack connection module now imported, you can use the following commands to connect to your Azure Stack. Note, AzureRM cmdlets can be targeted at multiple Azure clouds such as Azure China, Government, and Azure Stack.
|
||||
To target your Azure Stack instance, an AzureRM environment needs to be registered as follows.
|
||||
|
||||
|
@ -114,7 +118,7 @@ Once you've run through all of these commands, you should be successfully connec
|
|||
|
||||
Once logged in, you're ready to start adding images to your Azure Stack.
|
||||
|
||||
## Add VM Image to Platform Image Repository with PowerShell
|
||||
### Add VM Image to Platform Image Repository with PowerShell
|
||||
The first thing we'll need to do to upload an image with PowerShell, is import the Compute module, from our tools folder.
|
||||
|
||||
``` PowerShell
|
||||
|
@ -148,7 +152,7 @@ You'll notice at the end of the command, there was a parameter called **-CreateG
|
|||
|
||||
If you're interested in understanding a bit more about the other parameters used with the command above, [check out the docs](https://docs.microsoft.com/en-us/azure/azure-stack/azure-stack-add-vm-image).
|
||||
|
||||
## Explore the Platform Image Repository
|
||||
### Explore the Platform Image Repository
|
||||
With the upload complete, it's important to confirm that the image now exist in the PIR. To do so, follow these steps:
|
||||
|
||||
1. Open the Azure Stack Admin Portal and log in as the Service Administrator.
|
||||
|
@ -157,18 +161,18 @@ With the upload complete, it's important to confirm that the image now exist in
|
|||
4. In the Compute blade, under Content, click on **VM Images**.
|
||||
5. In the VM Images blade, you should see your Ubuntu image listed.
|
||||
|
||||
![Image Added](/deploy/azurestack/docs/media/VMImages.PNG)
|
||||
![Image Added](<../assets/azurestack/VMImages.PNG>)
|
||||
|
||||
6. Close all open blades and return to the dashboard.
|
||||
|
||||
# Next Step
|
||||
You're now ready to start the deployment of the Parts Unlimited MRP environment, or explore any one of the DevOps scenarios provided within this documetation. These include CI/CD with Jenkins, Configuration Management with Chef, and Configuration Management with Puppet, with more to come in the future. Check out the [Getting Started with Parts Unlimited](/deploy/azurestack/docs/get_started_with_MRP.md) page to go forward.
|
||||
## Next Step
|
||||
You're now ready to start the deployment of the Parts Unlimited MRP environment, or explore any one of the DevOps scenarios provided within this documetation. These include CI/CD with Jenkins, Configuration Management with Chef, and Configuration Management with Puppet, with more to come in the future. Check out the [Getting Started with Parts Unlimited](azurestack-35-mrp.html) page to go forward.
|
||||
|
||||
If you're interested in understanding how to create more professional marketplace items, so that your users can deploy the base Ubuntu image, along with any other future images, direct from the Azure Stack marketplace, then read on...
|
||||
|
||||
## *Optional - Create a Marketplace item for your Ubuntu Base Image
|
||||
### *Optional - Create a Marketplace item for your Ubuntu Base Image
|
||||
If you'd like something like this, in your Azure Stack gallery:
|
||||
|
||||
![Azure Stack Gallery](/deploy/azurestack/docs/media/gallerymedium.PNG)
|
||||
![Azure Stack Gallery](<../assets/azurestack/gallerymedium.PNG>)
|
||||
|
||||
then [follow the steps over on this page](/deploy/azurestack/docs/add_marketplace_item.md).
|
||||
then [follow the steps over on this page](azurestack-34-marketplace.html).
|
|
@ -1,9 +1,14 @@
|
|||
# Adding a Marketplace Item to Azure Stack
|
||||
---
|
||||
layout: page
|
||||
title: Adding a Marketplace Item to Azure Stack
|
||||
category: AzureStack
|
||||
order: 4
|
||||
---
|
||||
Once your Ubuntu base image is in the platform image repository within your Azure Stack, you can deploy ARM templates that reference those images without any further prep work...however having choices in your marketplace is pretty cool, and it’s not that difficult. Especially seeing as I’ve packaged marketplace items for you to save you a job :-)
|
||||
|
||||
If you've stumbled upon this page and you're not quite sure what a Marketplace item is, it's one of these:
|
||||
|
||||
![Azure Stack Gallery](/deploy/azurestack/docs/media/gallerymedium.PNG)
|
||||
![Azure Stack Gallery](<../assets/azurestack/gallerymedium.PNG>)
|
||||
|
||||
As you can see, I've created entries for the Ubuntu base image, along with images specific to Jenkins, and the Parts Unlimited MRP application. Creating a marketplace item requires a number of steps, which involve the following:
|
||||
|
||||
|
@ -14,10 +19,10 @@ As you can see, I've created entries for the Ubuntu base image, along with image
|
|||
|
||||
Once you have those 3 items defined, you're at a point where you can used the [Azure Gallery Packager tool](http://www.aka.ms/azurestackmarketplaceitem) to package all of those respective files into a .azpkg file, that is then uploaded into your Azure Stack.
|
||||
|
||||
## Download an Example Package for the Base Ubuntu Image
|
||||
### Download an Example Package for the Base Ubuntu Image
|
||||
As mentioned earlier, it's much easier if you start from an existing set of resources, and customize from there, so to help you understand the relationship between the core package files discussed above, you can download a set of files I've provided, already packaged as a .azpkg file. **Download it onto your MAS-CON01 machine**.
|
||||
|
||||
- [Download Base Image Package Files](/deploy/azurestack/instances/ubuntu_server_1604_base/Canonical.UbuntuServer.1.0.0.azpkg?raw=true)
|
||||
- [Download Base Image Package Files](https://github.com/Microsoft/PartsUnlimitedMRP/blob/master/deploy/azurestack/instances/ubuntu_server_1604_base/Canonical.UbuntuServer.1.0.0.azpkg?raw=true)
|
||||
|
||||
1. Once downloaded, navigate to the folder containing your newly downloaded image, and **create a copy of the file**.
|
||||
2. Right click the new copy, and **rename to .zip**
|
||||
|
@ -25,7 +30,7 @@ As mentioned earlier, it's much easier if you start from an existing set of reso
|
|||
|
||||
What you'll see inside are a number of files and folders.
|
||||
|
||||
![Unzipped Package](/deploy/azurestack/docs/media/UnzippedPackage.PNG)
|
||||
![Unzipped Package](<../assets/azurestack/UnzippedPackage.PNG>)
|
||||
|
||||
Some of these can be ignored, as they are created during the packaging process, such as the **_rels** folder, a **GUID folder** and a **Content_Types** XML document. Ignore all of these, and focus on the key files we'll talk about now.
|
||||
|
||||
|
@ -44,12 +49,11 @@ Start-Sleep -S 240
|
|||
Restart-Computer -Force -Confirm:$false
|
||||
```
|
||||
|
||||
|
||||
Ben Gelens has a [great write up on his blog](https://azurestack.eu/2016/10/adding-and-using-os-gallery-items-to-azure-stack-tp2/) on adding marketplace items, and in addition, there is some very useful information on marketplace items on the [official Azure Stack documentation site](https://docs.microsoft.com/en-us/azure/azure-stack/azure-stack-create-and-publish-marketplace-item), especially the explanation of the key manifest.json components that are very useful to understand.
|
||||
|
||||
The key question is, how do you take those files and folders, and get them into Azure Stack?
|
||||
|
||||
## Uploading a Package to Azure Stack
|
||||
### Uploading a Package to Azure Stack
|
||||
|
||||
Normally, once you've finished creating your respective files within your package folder, you would download and install the [Azure Gallery Packager Tool](http://www.aka.ms/azurestackmarketplaceitem) and follow the [guidance here](https://docs.microsoft.com/en-us/azure/azure-stack/azure-stack-create-and-publish-marketplace-item).
|
||||
|
||||
|
@ -97,13 +101,13 @@ Now that we have the package ready to upload, we need *somewhere* in Azure Stack
|
|||
|
||||
When successful, you should see a **StatusCode** of **Created**
|
||||
|
||||
![Successful Upload](/deploy/azurestack/docs/media/PSCreated.PNG)
|
||||
![Successful Upload](<../assets/azurestack/PSCreated.PNG>)
|
||||
|
||||
Go back and refresh the portal, and under New -> Virtual Machines -> See All, you should see your newly added Ubuntu marketplace item
|
||||
|
||||
![Ubuntu Marketplace Image](/deploy/azurestack/docs/media/UbuntuCreated1604.PNG)
|
||||
![Ubuntu Marketplace Image](<../assets/azurestack/UbuntuCreated1604.PNG>)
|
||||
|
||||
## Test Deployment of your Ubuntu Base Image
|
||||
### Test Deployment of your Ubuntu Base Image
|
||||
You've successfully added a new marketplace item, but it's important to check that it works as expected. To do so, we'll walk through a UI deployment:
|
||||
|
||||
1. On MAS-CON01, from the Azure Stack Admin Portal Dashboard, click on **New**, then **Virtual Machines**, then **Ubuntu Server 16.04-LTS**
|
||||
|
@ -114,7 +118,7 @@ You've successfully added a new marketplace item, but it's important to check th
|
|||
6. Click on your newly deployed Ubuntu VM, then click on **Overview**
|
||||
7. You should see your Public IP defined as a property in the Overview blade - make a note of this Public IP
|
||||
|
||||
![VM Public IP](/deploy/azurestack/docs/media/UbuntuVMCreated.PNG)
|
||||
![VM Public IP](<../assets/azurestack/UbuntuVMCreated.PNG>)
|
||||
|
||||
Once successfully deployed, you can log into your Ubuntu base image via Putty. If you haven't installed Putty on MAS-CON01, here's a PowerShell script you can run to quickly grab it. Run the following from an administrative PowerShell console.
|
||||
|
||||
|
@ -124,6 +128,6 @@ Start-Process -FilePath C:\putty.exe
|
|||
```
|
||||
When Putty opens, you'll need the Public IP address of the Ubuntu VM you deployed earlier. Once you have it, enter it into the appropriate window in Putty, and click **Open**. Note - Port 22 is open on this VM, as our ARM template that deployed the image opened it automatically.
|
||||
|
||||
# Next Step
|
||||
## Next Step
|
||||
|
||||
Once successfully connected to your Ubuntu VM, you're now ready to move on to the [DevOps scenarios](/deploy/azurestack/docs/get_started_with_MRP.md).
|
||||
Once successfully connected to your Ubuntu VM, you're now ready to move on to get started with Parts Unlimited MRP and exploring the [DevOps scenarios](azurestack-35-mrp.html).
|
|
@ -1,19 +1,23 @@
|
|||
# Getting Started with Parts Unlimited MRP
|
||||
|
||||
---
|
||||
layout: page
|
||||
title: Getting Started with Parts Unlimited MRP
|
||||
category: AzureStack
|
||||
order: 5
|
||||
---
|
||||
As mentioned in the previous steps, Parts Unlimited MRP is a fictional outsourced Manufacturing Resource Planning (MRP) application for training purposes based on the description in chapters 31-35 of The Phoenix Projectby Gene Kim, Kevin Behr and George Spafford. © 2013 IT Revolution Press LLC, Portland, OR. Resemblance to “Project Unicorn” in the novel is intentional; resemblance to any real company is purely coincidental.
|
||||
|
||||
The application uses entirely open source software including Linux, Java, Apache, and MongoDB which creates a web front end, an order service, and an integration service.
|
||||
|
||||
As part of the deployment, you'll have the opportunity to embrace a number of core DevOps practices, along with experiencing a number of different open source technologies.
|
||||
|
||||
### Key Features
|
||||
#### Key Features
|
||||
- Front end service - runs Apache Tomcat and talks to order service
|
||||
- Order and Integration service - runs Java and calls MongoDB
|
||||
- Integration service - present to integrate with Parts Unlimited Website
|
||||
- Includes a Dockerfile and sample publishing profile to publish to a Docker container
|
||||
- Includes Azure RM JSON templates and PowerShell automation scripts to easily build and provision your environment
|
||||
|
||||
### Fundamentals
|
||||
#### Fundamentals
|
||||
- Infrastructure as Code - (IaC)
|
||||
- Continuous Integration - (CI)
|
||||
- Continuous Deployment - (CD)
|
||||
|
@ -21,20 +25,20 @@ As part of the deployment, you'll have the opportunity to embrace a number of co
|
|||
|
||||
As time moves forward, more documents will be added that support additonal DevOps practices, going beyond the fundamentals and exploring more advanced techniques and tools.
|
||||
|
||||
## Choose a path
|
||||
### Choose a path
|
||||
Below, you'll find the current scenarios, with a brief description. Some will consume more time than others, however all of them will provide valuable learnings across core DevOps practices.
|
||||
|
||||
### Jenkins - Continuous Integration and Continuous Deployment
|
||||
#### Jenkins - Continuous Integration and Continuous Deployment
|
||||
In this multi-part lab, we will set up the Jenkins Master in Azure Stack, that will be used for the Parts Unlimited MRP project. We'll then step through using that environment to showcase CI/CD capabilities. [Jenkins](https://jenkins.io/) is an open source automation server that provides capabilities for building, deploying and automating any project.
|
||||
|
||||
[Go to the Jenkins lab!](/deploy/azurestack/docs/jenkins_setup.md)
|
||||
[Go to the Jenkins lab!](azurestack-36-jenkins-setup.html)
|
||||
|
||||
### Chef - Continuous Deployment with Chef
|
||||
In this multi-part lab, you will explore some of the new features and capabilities of deploying the Parts Unlimited MRP App via Chef Server in Azure Stack. This hands-on lab is designed to point out new features of [Chef Server](https://www.chef.io/), discuss and describe them, and enable you to understand and explain these features to customers as part of the DevOps Lifecycle.
|
||||
|
||||
[Go to the Chef lab!](/deploy/azurestack/docs/chef_setup.md)
|
||||
|
||||
### Puppet - Continuous Deployment with Puppet
|
||||
#### Puppet - Continuous Deployment with Puppet
|
||||
In this multi-part lab, you will deploy a Java app, the Parts Unlimited MRP App, using [Puppet](https://puppet.com/) from PuppetLabs. Puppet is a configuration management system that allows you to automate provisioning and configuration of machines by describing the state of your infrastructure as code. Infrastructure as Code is an important pillar of good DevOps.
|
||||
|
||||
[Go to the Puppet lab!](/deploy/azurestack/docs/puppet_setup.md)
|
||||
[Go to the Puppet lab!](azurestack-39-puppet-setup.html)
|
||||
|
||||
#### Chef - Continuous Deployment with Chef
|
||||
In this multi-part lab, you will explore some of the new features and capabilities of deploying the Parts Unlimited MRP App via Chef Server in Azure Stack. This hands-on lab is designed to point out new features of [Chef Server](https://www.chef.io/), discuss and describe them, and enable you to understand and explain these features to customers as part of the DevOps Lifecycle.
|
||||
|
||||
[Go to the Chef lab!](azurestack-41-chef-setup.html)
|
|
@ -1,12 +1,17 @@
|
|||
# Setup Environment | Parts Unlimited MRP with Jenkins
|
||||
---
|
||||
layout: page
|
||||
title: Setup Parts Unlimited MRP with Jenkins
|
||||
category: AzureStack
|
||||
order: 6
|
||||
---
|
||||
In this multi-part lab, we will set up the Jenkins Master in Azure Stack, that will be used for the Parts Unlimited MRP project. We'll then step through using that environment to showcase CI/CD capabilities. [Jenkins](https://jenkins.io/) is an open source automation server that provides capabilities for building, deploying and automating any project.
|
||||
|
||||
## Prerequisites
|
||||
### Prerequisites
|
||||
There are a couple of key things you'll need to have in place before setting up this lab environment, which, if you've been following the steps so far, you should already have most of them :-)
|
||||
|
||||
- A configured Azure Stack, logged into MAS-CON01
|
||||
- The Azure Stack Tools downloaded to MAS-CON01 ([Details here](/deploy/azurestack/docs/adding_vm_images.md#connecting-to-azure-stack-via-powershell))
|
||||
- An Ubuntu base image in the Platform Image Repository ([Details here](/deploy/azurestack/docs/adding_vm_images.md#add-vm-image-to-platform-image-repository-with-powershell))
|
||||
- The Azure Stack Tools downloaded to MAS-CON01 ([Details here](azurestack-33-images.html#connecting-to-azure-stack-via-powershell))
|
||||
- An Ubuntu base image in the Platform Image Repository ([Details here](azurestack-33-images.html#add-vm-image-to-platform-image-repository-with-powershell))
|
||||
- Putty installed on MAS-CON01 (use the script below, from an administrative PowerShell console to download)
|
||||
- An Oracle Account, in order to source the latest JDK (Test creds at http://www.oracle.com then click Sign-in at the top)
|
||||
|
||||
|
@ -15,7 +20,7 @@ Invoke-Webrequest https://the.earth.li/~sgtatham/putty/latest/x86/putty.exe -Out
|
|||
```
|
||||
Once you've got all those sorted, you're ready to deploy the environment. The environment will consist of a single **resource group** containing the Jenkins Master VM, connected to a single virtual network. Later in the lab, you'll deploy another standard Ubuntu Linux VM, that will be configured using Jenkins.
|
||||
|
||||
## Deployment Options
|
||||
### Deployment Options
|
||||
|
||||
Now, you have 2 options for deployment.
|
||||
|
||||
|
@ -24,13 +29,13 @@ Now, you have 2 options for deployment.
|
|||
|
||||
**The end result of both of these options is the same, however if you'd like to populate your gallery with more items, use option 2.**
|
||||
|
||||
### *Option 1 - ARM Template & Custom Deployment
|
||||
#### *Option 1 - ARM Template & Custom Deployment
|
||||
If you're not interested in creating a Marketplace item for 'Parts Unlimited MRP with Jenkins', then this quick and easy approach should make things, well, quick and easy for you!
|
||||
|
||||
Firstly, from your MAS-CON01 machine, you need to click on the button below, and fill in the parameter fields. The link should open the Azure Stack portal, and if you're not already logged in, it'll prompt you for your Azure Stack credentials, then take you immediately to the custom template blade.
|
||||
|
||||
<a href="https://adminportal.local.azurestack.external/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FMicrosoft%2FPartsUnlimitedMRP%2Fmaster%2Fdeploy%2Fazurestack%2Finstances%2Fjenkins_standalone%2FTheJenkinsProject.Jenkins%2FDeploymentTemplates%2FJenkinsDeploy.json" target="_blank">
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/docs/media/DeployToStack.png"/>
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/docs/assets/azurestack/DeployToStack.png"/>
|
||||
</a>
|
||||
|
||||
You'll need to enter information for the following fields:
|
||||
|
@ -39,31 +44,31 @@ You'll need to enter information for the following fields:
|
|||
- **Resource Group** - for testing purposes, use **pumrp-jenkins**.
|
||||
- **Location** - seeing as this is Azure Stack, you'll just be able to choose local in the current technical preview.
|
||||
|
||||
![Jenkins Deployment](/deploy/azurestack/docs/media/JenkinsDeploy.PNG)
|
||||
![Jenkins Deployment](<../assets/azurestack/JenkinsDeploy.PNG>)
|
||||
|
||||
If you're interested in taking a deeper look at the ARM template that is used for deployment, you could either **click Edit Template** within the custom template deployment blade, and that will present the template that will be used for the deployment, or alternatively, you could **[grab the ARM template from here](/deploy/azurestack/instances/jenkins_standalone/TheJenkinsProject.Jenkins/DeploymentTemplates/JenkinsDeploy.json)**
|
||||
If you're interested in taking a deeper look at the ARM template that is used for deployment, you could either **click Edit Template** within the custom template deployment blade, and that will present the template that will be used for the deployment, or alternatively, you could **[grab the ARM template from here](https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/instances/jenkins_standalone/TheJenkinsProject.Jenkins/DeploymentTemplates/JenkinsDeploy.json)**
|
||||
|
||||
Depending on your hardware, the deployment of the key artifacts, the virtual machine, and its respective automated configuration, may take a while. Expect around 20-30 mins for the deployment, unless you have new hardware, and a bank of SSDs for storage!
|
||||
|
||||
Once the deployment has completed, you're ready to proceed with configuring Jenkins.
|
||||
|
||||
### *Option 2 - Create a Custom Marketplace Item for Deployment
|
||||
#### *Option 2 - Create a Custom Marketplace Item for Deployment
|
||||
If you are interested in adding a custom marketplace item to your Azure Stack Marketplace, then these steps will help. I've already made the package for you, so you should just be able to follow these steps, and import it right into your Azure Stack.
|
||||
|
||||
As we saw earlier, when we [added our Ubuntu base image to the Azure Stack marketplace](/deploy/azurestack/docs/add_marketplace_item.md), things are much easier when something is packaged for you, so to start things off, pull down the .azpkg file for our Jenkins environment, that I've stored on GitHub. From yor **MAS-CON01** machine, do the following:
|
||||
As we saw earlier, when we [added our Ubuntu base image to the Azure Stack marketplace](azurestack-34-marketplace.html), things are much easier when something is packaged for you, so to start things off, pull down the .azpkg file for our Jenkins environment, that I've stored on GitHub. From yor **MAS-CON01** machine, do the following:
|
||||
|
||||
- [Download Jenkins Package](/deploy/azurestack/instances/jenkins_standalone/TheJenkinsProject.Jenkins.1.0.0.azpkg)
|
||||
- [Download Jenkins Package](https://github.com/Microsoft/PartsUnlimitedMRP/blob/master/deploy/azurestack/instances/jenkins_standalone/TheJenkinsProject.Jenkins.1.0.0.azpkg?raw=true)
|
||||
|
||||
1. Navigate to your **TheJenkinsProject.Jenkins.1.0.0.azpkg** file, you downloaded earlier
|
||||
2. Move it to a newly created folder **C:\MyMarketPlaceItems**.
|
||||
|
||||
It’s important to note that if you are going to use the package I have provided, you need to have used the following info when you uploaded your Ubuntu base VHD image to the platform image repository [earlier](/deploy/azurestack/docs/adding_vm_images.md). Any differences, and the package I’m providing will not reference your uploaded image. If you used an exact copy of my PowerShell upload script, you're all set.
|
||||
It’s important to note that if you are going to use the package I have provided, you need to have used the following info when you uploaded your Ubuntu base VHD image to the platform image repository [earlier](azurestack-33-images.html). Any differences, and the package I’m providing will not reference your uploaded image. If you used an exact copy of my PowerShell upload script, you're all set.
|
||||
|
||||
- Publisher "Canonical"
|
||||
- Offer "UbuntuServer"
|
||||
- SKU "16.04.3-LTS"
|
||||
|
||||
Now that we have the package ready to upload, we need *somewhere* in Azure Stack to upload it to. Fortunately, we [created a storage account for this very purpose earlier](/deploy/azurestack/docs/add_marketplace_item.md#uploading-a-package-to-azure-stack), so we'll use the same storage account for this package.
|
||||
Now that we have the package ready to upload, we need *somewhere* in Azure Stack to upload it to. Fortunately, we [created a storage account for this very purpose earlier](azurestack-34-marketplace.html#uploading-a-package-to-azure-stack), so we'll use the same storage account for this package.
|
||||
|
||||
1. Connect to your Azure Stack via an **administrative PowerShell console**. If you're not still connected from the earlier steps, run the following:
|
||||
|
||||
|
@ -96,11 +101,11 @@ Now that we have the package ready to upload, we need *somewhere* in Azure Stack
|
|||
|
||||
When successful, you should see a **StatusCode** of **Created**
|
||||
|
||||
![Successful Upload](/deploy/azurestack/docs/media/PSCreated.PNG)
|
||||
![Successful Upload](<../assets/azurestack/PSCreated.PNG>)
|
||||
|
||||
Go back and refresh the portal, and under **New -> Virtual Machines -> See All**, you should see your newly added Jenkins marketplace item
|
||||
|
||||
![Jenkins added to Marketplace](/deploy/azurestack/docs/media/JenkinsMarketplace.PNG)
|
||||
![Jenkins added to Marketplace](<../assets/azurestack/JenkinsMarketplace.PNG>)
|
||||
|
||||
With your newly created marketplace item created and pushed to the Azure Stack Marketplace, we're ready to deploy an instance of the environment.
|
||||
|
||||
|
@ -114,19 +119,19 @@ With your newly created marketplace item created and pushed to the Azure Stack M
|
|||
|
||||
Once you've filled in the fields, it should look like this:
|
||||
|
||||
![Deploying Jenkins](/deploy/azurestack/docs/media/JenkinsDeploy.PNG)
|
||||
![Deploying Jenkins](<../assets/azurestack/JenkinsDeploy.PNG>)
|
||||
|
||||
4. Click **OK** to confirm the parameters, and then **Create** to start the deployment.
|
||||
|
||||
Depending on your hardware, the deployment of the key artifacts, the virtual machine, and its respective automated configuration, may take a while. Expect around 20-30 mins for the deployment, unless you have new hardware, and a bank of SSDs for storage!
|
||||
Once the deployment has completed, you're ready to proceed with configuring Jenkins.
|
||||
|
||||
## Jenkins Setup
|
||||
### Jenkins Setup
|
||||
Regardless of using Option 1, or Option 2, your environment should now be deployed. You can now continue with the configuration of the Jenkins environment specifically.
|
||||
|
||||
1. Firstly, we need to **obtain the public IP of the Jenkins Master VM**. In the Azure Stack portal, click on **Resource Groups** and look for the Resource Group that you have just created. Click on the virtual machine in the resource group (_pumrp-jenkins_ in this example) and look for the "Public IP address/DNS name label".
|
||||
|
||||
![Obtain the public IP of the Jenkins Master](/deploy/azurestack/docs/media/JenkinsMRPDeployed.PNG)
|
||||
![Obtain the public IP of the Jenkins Master](<../assets/azurestack/JenkinsMRPDeployed.PNG>)
|
||||
|
||||
2. We can now **SSH to the Jenkins Master VM**. To do this, we'll use PuTTY, (or any other ssh tool that you like) to connect to the IP address of the VM, and once connected type the following information to login to the VM:
|
||||
|
||||
|
@ -135,7 +140,7 @@ Regardless of using Option 1, or Option 2, your environment should now be deploy
|
|||
|
||||
To make this lab easier, the user has been pre-configured to be **jenkinsadmin** through the automated deployment.
|
||||
|
||||
### Configure your Jenkins Master
|
||||
#### Configure your Jenkins Master
|
||||
In this task, we will perform the basic configuration of the Jenkins master server and install the necessary plugins that will be used for Continuous Integration.
|
||||
|
||||
**1.** Obtain the initial admin password
|
||||
|
@ -148,7 +153,7 @@ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
|
|||
|
||||
Copy the value returned by the command. Keep the SSH session open, we will return at the end of this task.
|
||||
|
||||
![Initial jenkins admin password](/deploy/azurestack/docs/media/JenkinsPassword.PNG)
|
||||
![Initial jenkins admin password](<../assets/azurestack/JenkinsPassword.PNG>)
|
||||
|
||||
**2.** Unlock the jenkins master
|
||||
|
||||
|
@ -160,11 +165,11 @@ http://ip_address_of_your_jenkinsmaster:8080
|
|||
|
||||
Paste the initial admin password obtained earlier to unlock your instance of Jenkins and click **Continue**.
|
||||
|
||||
![Initial jenkins admin password](/deploy/azurestack/docs/media/initial_jenkins_unlock.png)
|
||||
![Initial jenkins admin password](<../assets/azurestack/initial_jenkins_unlock.png>)
|
||||
|
||||
Click **Install suggested plugins**
|
||||
|
||||
![Initial jenkins plugins](/deploy/azurestack/docs/media/initial_jenkins_plugins.png)
|
||||
![Initial jenkins plugins](<../assets/azurestack/initial_jenkins_plugins.png>)
|
||||
|
||||
**3.** Create the first user
|
||||
|
||||
|
@ -175,7 +180,7 @@ Create a user from the "Create First Admin User":
|
|||
* E-mail address = jenkins@microsoft.com
|
||||
* Click **Save and Finish**.
|
||||
|
||||
![Initial jenkins plugins](/deploy/azurestack/docs/media/JenkinsCreateAdminUser.PNG)
|
||||
![Initial jenkins plugins](<../assets/azurestack/JenkinsCreateAdminUser.PNG>)
|
||||
|
||||
**4.** Start Using Jenkins
|
||||
|
||||
|
@ -192,7 +197,7 @@ Under **Jenkins Location** look for the Jenkins URL field and type the URL of yo
|
|||
|
||||
**NOTE:** the URL may already be here but type it again and save to ensure the proper completion of the rest of the lab.
|
||||
|
||||
![Jenkins URL](/deploy/azurestack/docs/media/JenkinsLocation.PNG)
|
||||
![Jenkins URL](<../assets/azurestack/JenkinsLocation.PNG>)
|
||||
|
||||
Click **Save**
|
||||
|
||||
|
@ -205,7 +210,7 @@ Type the following command:
|
|||
sudo apt-get install git -y
|
||||
```
|
||||
|
||||
### Configure Jenkins
|
||||
#### Configure Jenkins
|
||||
The three tools that we will need to create our pipeline on Jenkins needs to be configured on our instance of Jenkins.
|
||||
|
||||
Connect to the Jenkins master that you have configured in the previous task using port 8080:
|
||||
|
@ -227,7 +232,7 @@ Click on **Add JDK**
|
|||
* Click on the link to enter the username and password of your Oracle account (Test credentials here: https://www.oracle.com and click on Sign In at the top) then click **OK** then **Close**
|
||||
* Click **Save**
|
||||
|
||||
![JDK Installation](/deploy/azurestack/docs/media/JDKSettings.PNG)
|
||||
![JDK Installation](<../assets/azurestack/JDKSettings.PNG>)
|
||||
|
||||
**2.** Configure Gradle
|
||||
|
||||
|
@ -240,14 +245,14 @@ Gradle will be used to build the Parts Unlimited MRP application. If needed, you
|
|||
* Select the latest version of Gradle in the drop-down list.
|
||||
* Click **Save**
|
||||
|
||||
![Gradle Installation](/deploy/azurestack/docs/media/JenkinsGradle.PNG)
|
||||
![Gradle Installation](<../assets/azurestack/JenkinsGradle.PNG>)
|
||||
|
||||
# Next steps
|
||||
## Next steps
|
||||
|
||||
In this lab, you learned how to setup a Jenkins Master on Azure Stack, try these labs for the next steps:
|
||||
|
||||
- [Parts Unlimited MRP Continous Integration with Jenkins](/deploy/azurestack/docs/jenkins_CI.md)
|
||||
- [Parts Unlimited MRP Continous Deployment with Jenkins](/deploy/azurestack/docs/jenkins_CD.md)
|
||||
- [Parts Unlimited MRP Continous Integration with Jenkins](azurestack-37-jenkins-ci.html)
|
||||
- [Parts Unlimited MRP Continous Deployment with Jenkins](azurestack-38-jenkins-cd.html)
|
||||
|
||||
## Continuous Feedback
|
||||
|
|
@ -1,7 +1,12 @@
|
|||
# Continuous Integration for Parts Unlimited MRP with Jenkins
|
||||
---
|
||||
layout: page
|
||||
title: Continuous Integration with Jenkins
|
||||
category: AzureStack
|
||||
order: 7
|
||||
---
|
||||
In this lab, we have an application called Parts Unlimited MRP. We want to set up Jenkins to be able continuously integrate code into the master branch of code. This means that whenever code is committed and pushed to the master branch, we want to ensure that it integrates into our code correctly to get fast feedback. To do so, we are going to be creating a pipeline that will allow us to compile and run unit tests on our code when it is pushed to GitHub.
|
||||
|
||||
## *Important Consideration for Azure Stack
|
||||
### *Important Consideration for Azure Stack
|
||||
Combining Jenkins and GitHub allows for the automated building of an application as soon as developers check in code to their GitHub repository, through a capability known as webhooks. For instance, you can configure Jenkins and GitHub in such a way that when GitHub detects new code from your developers, it automatically sends information to Jenkins, which triggers the build process to start, using the freshly checked-in code. This is more efficient than having Jenkins poll GitHub on an interval for instance, or via manual triggering.
|
||||
|
||||
Due to the way that Azure Stack is configured from a networking perspective, utilizing webhooks from GitHub (resides on the public internet) and your Jenkins VM (inside an Azure Stack virtual network, which itself is likely inside your corporate network) is difficult. If you recall earlier, your IP address for your Jenkins Master VM is likely 192.168.102.X i.e. a private IP. This will not resolve on the public internet, and thus, GitHub would not be able to reach this address directly.
|
||||
|
@ -10,15 +15,15 @@ Workarounds include the use of a GitHub proxy, that has communication between th
|
|||
|
||||
These workarounds are currently out of scope, but may be addressed in the future. For this lab, you will trigger builds manually in Jenkins.
|
||||
|
||||
## Pre-Requisites: ##
|
||||
### Pre-Requisites: ##
|
||||
|
||||
- Completion of the lab [Set up Parts Unlimited MRP with Jenkins](/deploy/azurestack/docs/jenkins_setup.md)
|
||||
- Completion of the lab [Set up Parts Unlimited MRP with Jenkins](azurestack-36-jenkins-setup.html)
|
||||
- Have a GitHub account [https://github.com](https://github.com).
|
||||
|
||||
## Tasks Overview:
|
||||
### Tasks Overview:
|
||||
During the following tasks you will fork the Parts Unlimited MRP github repository and create a Jenkins pipeline for the Continuous Integration of the Parts Unlimited MRP application. You will learn how to configure Jenkins so that whenever a change is checked in on the code repository, a build will be triggered and several tests will be performed.
|
||||
|
||||
### Configure your GitHub repository
|
||||
#### Configure your GitHub repository
|
||||
|
||||
**1.** Nagivate to [https://github.com/Microsoft/PartsUnlimitedMRP/](https://github.com/Microsoft/PartsUnlimitedMRP/)
|
||||
|
||||
|
@ -28,9 +33,9 @@ During the following tasks you will fork the Parts Unlimited MRP github reposito
|
|||
|
||||
**NOTE**: if you have multiple accounts, select the account you want to fork to.
|
||||
|
||||
![Github fork](<../../../docs/assets/jenkins/github_fork.png>)
|
||||
![Github fork](<../assets/jenkins/github_fork.png>)
|
||||
|
||||
### Create a new pipeline
|
||||
#### Create a new pipeline
|
||||
In this task, we will create a new pipeline that will build the artifacts of the application. Before we do this however, there are a couple of settings to tweak on the Jenkins master, to ensure smooth operation of the lab.
|
||||
|
||||
**1.** Firstly navigate to:
|
||||
|
@ -43,7 +48,7 @@ http://ip_address_of_your_jenkinsmaster:8080/configureSecurity/
|
|||
|
||||
**3.** Untick the box "Prevent Cross Site Request Forgery exploits" and click **Save**
|
||||
|
||||
![CSRF_disabled](<../../../docs/assets/jenkins/csrf_disabled.png>)
|
||||
![CSRF_disabled](<../assets/jenkins/csrf_disabled.png>)
|
||||
|
||||
This will Disable the CSRF protection on the Jenkins master but is an easy way to enable CI with Github.
|
||||
|
||||
|
@ -53,13 +58,13 @@ Click **Save**
|
|||
|
||||
**NOTE:** You can also go directly to: http://IP_address_of_your_jenkinsmaster/view/All/newJob
|
||||
|
||||
![New Jenkins item](<../../../docs/assets/jenkins/jenkins_newitem.png>)
|
||||
![New Jenkins item](<../assets/jenkins/jenkins_newitem.png>)
|
||||
|
||||
* Type the following name for the pipeline: **PartsUnlimitedMRP**
|
||||
* Select **Pipeline**
|
||||
* Click **OK**
|
||||
|
||||
![New Jenkins Pipeline](<../../../docs/assets/jenkins/jenkins_newpipeline.png>)
|
||||
![New Jenkins Pipeline](<../assets/jenkins/jenkins_newpipeline.png>)
|
||||
|
||||
The pipeline type in Jenkins will allow us to describe all the build steps with Groovy code. This code can be easily ported on any Jenkins system and could also be embedded in a Jenkinsfile in the source code.
|
||||
|
||||
|
@ -85,17 +90,17 @@ The following code will clone the source code from PartsUnlimited, define the en
|
|||
|
||||
Replace the git url with the url of your own github repository.
|
||||
|
||||
![Pipeline script](<../../../docs/assets/jenkins/pipeline_script1.png>)
|
||||
![Pipeline script](<../assets/jenkins/pipeline_script1.png>)
|
||||
|
||||
The **stage** syntax in the code above defines a boundary of code that will be executed together. In a pipeline you can have as many stages as you want, they can run sequentially or in parallel, depending on the constraints that you have to build the application.
|
||||
|
||||
Click **Save** and then **Build Now**
|
||||
|
||||
![Pipeline script](<../../../docs/assets/jenkins/pipeline_build1.png>)
|
||||
![Pipeline script](<../assets/jenkins/pipeline_build1.png>)
|
||||
|
||||
After few seconds you should have a successful build with following result:
|
||||
|
||||
![Build results](<../../../docs/assets/jenkins/build_result1.png>)
|
||||
![Build results](<../assets/jenkins/build_result1.png>)
|
||||
|
||||
**6.** Building PartsUnlimitedMRP
|
||||
|
||||
|
@ -153,10 +158,10 @@ Click **Save** and then **Build Now**
|
|||
|
||||
**NOTE:** You may have to refresh the page once the build has completed to see the artifacts that have been produced.
|
||||
|
||||
![Build Pipeline for PartsUnlimitedMRP](<../../../docs/assets/jenkins/build_pipeline2.png>)
|
||||
![Build Pipeline for PartsUnlimitedMRP](<../assets/jenkins/build_pipeline2.png>)
|
||||
|
||||
|
||||
### Adding test coverage
|
||||
#### Adding test coverage
|
||||
The Parts Unlimited MRP Application performs tests for the OrderService component. In this task, we will add some information about the results of those tests and display the trend of the results of those tests.
|
||||
|
||||
**1.** Cick on **Configure** to edit your pipeline script.
|
||||
|
@ -207,17 +212,16 @@ The new pipeline code is:
|
|||
|
||||
The test results as displayed below will be displayed AFTER running two builds and refreshing the page.
|
||||
|
||||
![Pipeline with test results](<../../../docs/assets/jenkins/pipeline_withtest.png>)
|
||||
![Pipeline with test results](<../assets/jenkins/pipeline_withtest.png>)
|
||||
|
||||
|
||||
# Next steps
|
||||
## Next steps
|
||||
|
||||
In this lab, you learned how to create a Continuous Integration build that runs when new commits are pushed to the master branch. This allows you to get feedback as to whether your changes made breaking syntax changes, or if they broke one or more automated tests, or if your changes are OK. Try this lab out for next steps:
|
||||
|
||||
- [Parts Unlimited MRP Continous Deployment with Jenkins](/deploy/azurestack/docs/jenkins_CD.md)
|
||||
- [Parts Unlimited MRP Continous Deployment with Jenkins](azurestack-38-jenkins-cd.html)
|
||||
|
||||
## Continuous Feedback
|
||||
### Continuous Feedback
|
||||
|
||||
#### Issues / Questions about this Hands-On-Lab?
|
||||
##### Issues / Questions about this Hands-On-Lab?
|
||||
|
||||
[If you are encountering issues or have questions during this Hands-on-Lab, please open an issue by clicking here](https://github.com/Microsoft/PartsUnlimitedMRP/issues)
|
|
@ -1,17 +1,21 @@
|
|||
# Continuous Deployment with Jenkins
|
||||
|
||||
---
|
||||
layout: page
|
||||
title: Continuous Deployment with Jenkins
|
||||
category: AzureStack
|
||||
order: 8
|
||||
---
|
||||
In this lab, you will learn how to deploy the Parts Unlimited MRP App in an automated fashion onto a Linux VM with no agent.
|
||||
After this lab, you will have a working pipeline in Jenkins that will build, test, and deploy the Parts Unlimited MRP app to a Virtual Machine in Azure Stack.
|
||||
|
||||
## Pre-Requisites:
|
||||
### Pre-Requisites:
|
||||
|
||||
- Completion of the lab [Set up Parts Unlimited MRP with Jenkins](/deploy/azurestack/docs/jenkins_setup.md)
|
||||
- Completion of the [Continuous Integration with Jenkins lab](/deploy/azurestack/docs/jenkins_CI.md)
|
||||
- Completion of the lab [Set up Parts Unlimited MRP with Jenkins](azurestack-36-jenkins-setup.html)
|
||||
- Completion of the [Continuous Integration with Jenkins lab](azurestack-37-jenkins-ci.html)
|
||||
|
||||
## Overview:
|
||||
### Overview:
|
||||
During this lab, we will implement the continuous delivery of the artifacts that we have built in the previous lab.
|
||||
|
||||
## Install the SSH Agent plugin
|
||||
### Install the SSH Agent plugin
|
||||
In this task, we are going to install the ssh-agent plugin on Jenkins. This plugin will allow Jenkins to connect via ssh to the target machine during the deployment or the artifacts.
|
||||
|
||||
**1.** Switch to the SSH session to your Jenkins server (or open a new one if you have closed the one from the previous lab) and type the following command
|
||||
|
@ -32,7 +36,7 @@ sudo java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://Jenkins:
|
|||
|
||||
Keep your ssh session open.
|
||||
|
||||
## Create a pair of SSH keys
|
||||
### Create a pair of SSH keys
|
||||
In this taks, we will create a pair of ssh keys to be able to automatically connect to the deployment server.
|
||||
|
||||
**1.** Type the following command:
|
||||
|
@ -42,7 +46,7 @@ ssh-keygen
|
|||
|
||||
**2.** Press **Enter** to leave the default values for the filename and the passphrase.
|
||||
|
||||
![Creating a new ssh-rsa keypair](<../../../docs/assets/jenkins/ssh_key.png>)
|
||||
![Creating a new ssh-rsa keypair](<../assets/jenkins/ssh_key.png>)
|
||||
|
||||
**3.** Copy the private key file to /var/lib/jenkins/.ssh by typing the following commands:
|
||||
|
||||
|
@ -76,9 +80,9 @@ Because of the restart, you will have to authenticate again with the following c
|
|||
|
||||
Click **OK**
|
||||
|
||||
![Adding SSH key to Jenkins](<../../../docs/assets/jenkins/jenkins_addsshkey.png>)
|
||||
![Adding SSH key to Jenkins](<../assets/jenkins/jenkins_addsshkey.png>)
|
||||
|
||||
## Create the VM to run the Parts Unlimited MRP application
|
||||
### Create the VM to run the Parts Unlimited MRP application
|
||||
|
||||
Now, you have 2 options for deployment.
|
||||
|
||||
|
@ -87,7 +91,7 @@ Now, you have 2 options for deployment.
|
|||
|
||||
**The end result of both of these options is the same, however if you'd like to populate your gallery with more items, use option 2.**
|
||||
|
||||
### *Option 1 - ARM Template & Custom Deployment
|
||||
#### *Option 1 - ARM Template & Custom Deployment
|
||||
If you're not interested in creating a Marketplace item for 'Parts Unlimited MRP with SSH', then this quick and easy approach should make things, well, quick and easy for you!
|
||||
|
||||
Firstly, we need the SSH key to use with this new virtual machine. To obtain this, go back to your SSH session, and run:
|
||||
|
@ -98,12 +102,12 @@ cat ./.ssh/id_rsa.pub
|
|||
|
||||
Select the returned text, and copy it. We will use it later.
|
||||
|
||||
![Copy SSH public key](<../../../docs/assets/jenkins/copy_sshpublickey.png>)
|
||||
![Copy SSH public key](<../assets/jenkins/copy_sshpublickey.png>)
|
||||
|
||||
Then, from your MAS-CON01 machine, you need to click on the button below to deploy the MRP virtual machine, and fill in the parameter fields. The link should open the Azure Stack portal, and if you're not already logged in, it'll prompt you for your Azure Stack credentials, then take you immediately to the custom template blade.
|
||||
|
||||
<a href="https://adminportal.local.azurestack.external/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FMicrosoft%2FPartsUnlimitedMRP%2Fmaster%2Fdeploy%2Fazurestack%2Finstances%2Fparts_unlimited_SSH_mrp_base%2FPartsUnlimitedSSH.Ubuntu1604%2FDeploymentTemplates%2FPartsUnlimitedSSHMRP.json" target="_blank">
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/docs/media/DeployToStack.png"/>
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/docs/assets/azurestack/DeployToStack.png"/>
|
||||
</a>
|
||||
|
||||
You'll need to enter information for the following fields:
|
||||
|
@ -112,31 +116,31 @@ You'll need to enter information for the following fields:
|
|||
- **Resource Group** - for testing purposes, use **mrp-deploy**.
|
||||
- **Location** - seeing as this is Azure Stack, you'll just be able to choose local in the current technical preview.
|
||||
|
||||
![Jenkins Deployment](/deploy/azurestack/docs/media/MRPDeploy.PNG)
|
||||
![Jenkins Deployment](<../assets/azurestack/MRPDeploy.PNG>)
|
||||
|
||||
If you're interested in taking a deeper look at the ARM template that is used for deployment, you could either **click Edit Template** within the custom template deployment blade, and that will present the template that will be used for the deployment, or alternatively, you could **[grab the ARM template from here](/deploy/azurestack/instances/parts_unlimited_SSH_mrp_base/PartsUnlimitedSSH.Ubuntu1604/DeploymentTemplates/PartsUnlimitedSSHMRP.json)**
|
||||
If you're interested in taking a deeper look at the ARM template that is used for deployment, you could either **click Edit Template** within the custom template deployment blade, and that will present the template that will be used for the deployment, or alternatively, you could **[grab the ARM template from here](https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/instances/parts_unlimited_SSH_mrp_base/PartsUnlimitedSSH.Ubuntu1604/DeploymentTemplates/PartsUnlimitedSSHMRP.json)**
|
||||
|
||||
Depending on your hardware, the deployment of the key artifacts, the virtual machine, and its respective automated configuration, may take a while. Expect around 20-30 mins for the deployment, unless you have new hardware, and a bank of SSDs for storage!
|
||||
|
||||
Once the deployment has completed, you're ready to proceed with the lab.
|
||||
|
||||
### *Option 2 - Create a Custom Marketplace Item for Deployment
|
||||
#### *Option 2 - Create a Custom Marketplace Item for Deployment
|
||||
If you are interested in adding a custom marketplace item to your Azure Stack marketplace, then these steps will help. I've already made the package for you, so you should just be able to follow these steps, and import it right into your Azure Stack.
|
||||
|
||||
As we saw earlier, when we [added our Ubuntu base image to the Azure Stack marketplace](/deploy/azurestack/docs/add_marketplace_item.md), things are much easier when something is packaged for you, so to start things off, pull down the .azpkg file for our Parts Unlimited MRP with SSH machine, that I've stored on GitHub. From yor **MAS-CON01** machine, do the following:
|
||||
As we saw earlier, when we [added our Ubuntu base image to the Azure Stack marketplace](azurestack-34-marketplace.html), things are much easier when something is packaged for you, so to start things off, pull down the .azpkg file for our Parts Unlimited MRP with SSH machine, that I've stored on GitHub. From yor **MAS-CON01** machine, do the following:
|
||||
|
||||
- [Download Parts Unlimited MRP with SSH Package](https://github.com/Microsoft/PartsUnlimitedMRP/raw/master/deploy/azurestack/instances/parts_unlimited_SSH_mrp_base/PartsUnlimited.MRPSSH.1.0.0.azpkg)
|
||||
- [Download Parts Unlimited MRP with SSH Package](https://github.com/Microsoft/PartsUnlimitedMRP/blob/master/deploy/azurestack/instances/parts_unlimited_SSH_mrp_base/PartsUnlimited.MRPSSH.1.0.0.azpkg?raw=true)
|
||||
|
||||
1. Navigate to your **PartsUnlimited.MRPSSH.1.0.0.azpkg** file, you downloaded earlier
|
||||
2. Move it to a newly created folder **C:\MyMarketPlaceItems**.
|
||||
|
||||
It’s important to note that if you are going to use the package I have provided, you need to have used the following info when you uploaded your Ubuntu base VHD image to the platform image repository [earlier](/deploy/azurestack/docs/adding_vm_images.md). Any differences, and the package I’m providing will not reference your uploaded image. If you used an exact copy of my PowerShell upload script, you're all set.
|
||||
It’s important to note that if you are going to use the package I have provided, you need to have used the following info when you uploaded your Ubuntu base VHD image to the platform image repository [earlier](azurestack-33-images.html). Any differences, and the package I’m providing will not reference your uploaded image. If you used an exact copy of my PowerShell upload script, you're all set.
|
||||
|
||||
- Publisher "Canonical"
|
||||
- Offer "UbuntuServer"
|
||||
- SKU "16.04.3-LTS"
|
||||
|
||||
Now that we have the package ready to upload, we need *somewhere* in Azure Stack to upload it to. Fortunately, we [created a storage account for this very purpose earlier](/deploy/azurestack/docs/add_marketplace_item.md#uploading-a-package-to-azure-stack), so we'll use the same storage account for this package.
|
||||
Now that we have the package ready to upload, we need *somewhere* in Azure Stack to upload it to. Fortunately, we [created a storage account for this very purpose earlier](azurestack-34-marketplace.html#uploading-a-package-to-azure-stack), so we'll use the same storage account for this package.
|
||||
|
||||
1. Connect to your Azure Stack via an **administrative PowerShell console**. If you're not still connected from the earlier steps, run the following:
|
||||
|
||||
|
@ -169,11 +173,11 @@ Now that we have the package ready to upload, we need *somewhere* in Azure Stack
|
|||
|
||||
When successful, you should see a **StatusCode** of **Created**
|
||||
|
||||
![Successful Upload](/deploy/azurestack/docs/media/PSCreated.PNG)
|
||||
![Successful Upload](<../assets/azurestack/PSCreated.PNG>)
|
||||
|
||||
Go back and refresh the portal, and under **New -> Virtual Machines -> See All**, you should see your newly added Parts Unlimited MRP with SSH marketplace item
|
||||
|
||||
![MRP VM added to Marketplace](/deploy/azurestack/docs/media/MRPwithSSHMarketplace.PNG)
|
||||
![MRP VM added to Marketplace](<../assets/azurestack/MRPwithSSHMarketplace.PNG>)
|
||||
|
||||
With your newly created marketplace item created and pushed to the Azure Stack Marketplace, we're ready to deploy an instance of the environment.
|
||||
|
||||
|
@ -187,7 +191,7 @@ With your newly created marketplace item created and pushed to the Azure Stack M
|
|||
|
||||
Once you've filled in the fields, it should look like this:
|
||||
|
||||
![Jenkins Deployment](/deploy/azurestack/docs/media/MRPDeploy.PNG)
|
||||
![Jenkins Deployment](<../assets/azurestack/MRPDeploy.PNG>)
|
||||
|
||||
4. Click **OK** to confirm the parameters, and then **Create** to start the deployment.
|
||||
|
||||
|
@ -195,7 +199,7 @@ Depending on your hardware, the deployment of the key artifacts, the virtual mac
|
|||
|
||||
Once the deployment has completed, you're ready to proceed with the lab.
|
||||
|
||||
## Update the Jenkins pipeline
|
||||
### Update the Jenkins pipeline
|
||||
|
||||
In this task we will update the Jenkins pipeline to automatically deploy the artifacts after they have been built.
|
||||
|
||||
|
@ -311,7 +315,7 @@ node{
|
|||
|
||||
```
|
||||
|
||||
## Connecting the dots
|
||||
### Connecting the dots
|
||||
|
||||
**1.** Go to the source code on your GitHub repository
|
||||
|
||||
|
@ -319,7 +323,7 @@ node{
|
|||
|
||||
You can change the title of the page for example.
|
||||
|
||||
![Editing PartsUnlimitedMRP title](<../../../docs/assets/jenkins/edit_index.png>)
|
||||
![Editing PartsUnlimitedMRP title](<../assets/jenkins/edit_index.png>)
|
||||
|
||||
**3.** Click **Commit changes**
|
||||
|
||||
|
@ -334,7 +338,7 @@ Click on the step that is paused and enter the IP address of the MRP machine, th
|
|||
|
||||
Click **Proceed**
|
||||
|
||||
![Enter the IP Address of the deployment machine](/deploy/azurestack/docs/media/JenkinsGetMRPIP.PNG)
|
||||
![Enter the IP Address of the deployment machine](<../assets/azurestack/JenkinsGetMRPIP.PNG>)
|
||||
|
||||
**6.** Wait until the completion of the pipeline
|
||||
|
||||
|
@ -347,22 +351,20 @@ The IP address of the MRP deployment machine is the IP address of the Parts Unli
|
|||
|
||||
Verify that the Title in the browser is the same than the one you have modified in the code.
|
||||
|
||||
![Parts Unlimited Application](<../../../docs/assets/jenkins/pumrp_app.png>)
|
||||
![Parts Unlimited Application](<../assets/jenkins/pumrp_app.png>)
|
||||
|
||||
# Next steps
|
||||
## Next steps
|
||||
|
||||
In this lab, you learned how to implement Continuous Deployment for the Parts Unlimited MRP Application.
|
||||
This allows you to reduce the time to go in production and get feedback if your changes are okay. Implemented with Continuous Integration, the changes performed by the developers are pushed, in a continuous manner into production without removing the ability to have human control.
|
||||
|
||||
If you're interested in learning more about DevOps tooling on Azure Stack, check out these Hands-On-Labs:
|
||||
|
||||
- [Continuous Deployment with Puppet](/deploy/azurestack/docs/puppet_setup.md)
|
||||
- [Continuous Deployment with Chef](/deploy/azurestack/docs/chef_setup.md)
|
||||
- [Continuous Deployment with Puppet](azurestack-39-puppet-setup.html)
|
||||
- [Continuous Deployment with Chef](azurestack-41-chef-setup.html)
|
||||
|
||||
# Continuous Feedback
|
||||
## Continuous Feedback
|
||||
|
||||
#### Issues / Questions about this Hands-On-Lab ??
|
||||
##### Issues / Questions about this Hands-On-Lab ??
|
||||
|
||||
[If you are encountering issues or have questions during this Hands on Labs, please open an issue by clicking here](https://github.com/Microsoft/PartsUnlimitedMRP/issues)
|
||||
|
||||
Thanks
|
|
@ -1,13 +1,17 @@
|
|||
# Setup Environment | Continuous Deployment with Puppet
|
||||
|
||||
---
|
||||
layout: page
|
||||
title: Setup Continuous Deployment with Puppet
|
||||
category: AzureStack
|
||||
order: 9
|
||||
---
|
||||
In this multi-part lab, we will set up the Puppet Master in Azure Stack, that will be used for Continuous Deployment of the Parts Unlimited MRP project. We'll then step through using that environment to showcase its CD capabilities. [Puppet](https://puppetlabs.com/) is a configuration management system that allows you to automate provisioning and configuration of machines by describing the state of your infrastructure as code. Infrastructure as Code is an important pillar of good DevOps.
|
||||
|
||||
## Prerequisites
|
||||
### Prerequisites
|
||||
There are a couple of key things you'll need to have in place before setting up this lab environment, which, if you've been following the steps across other labs so far, you should already have most of them :-)
|
||||
|
||||
- A configured Azure Stack, logged into MAS-CON01
|
||||
- The Azure Stack Tools downloaded to MAS-CON01 ([Details here](/deploy/azurestack/docs/adding_vm_images.md#connecting-to-azure-stack-via-powershell))
|
||||
- An Ubuntu base image in the Platform Image Repository ([Details here](/deploy/azurestack/docs/adding_vm_images.md#add-vm-image-to-platform-image-repository-with-powershell))
|
||||
- The Azure Stack Tools downloaded to MAS-CON01 ([Details here](azurestack-33-images.html#connecting-to-azure-stack-via-powershell))
|
||||
- An Ubuntu base image in the Platform Image Repository ([Details here](azurestack-33-images.html#add-vm-image-to-platform-image-repository-with-powershell))
|
||||
- Putty installed on MAS-CON01 (use the script below, from an administrative PowerShell console to download)
|
||||
|
||||
```powershell
|
||||
|
@ -22,7 +26,7 @@ Once you've got all those sorted, you're ready to deploy the environment. In thi
|
|||
- Test the Environment Configuration
|
||||
- Create a Puppet program to describe the environment for the MRP application
|
||||
|
||||
## Provisioning the Puppet Enterprise Master | Deployment Options
|
||||
### Provisioning the Puppet Enterprise Master | Deployment Options
|
||||
|
||||
Now, you have 2 options for deployment.
|
||||
|
||||
|
@ -31,13 +35,13 @@ Now, you have 2 options for deployment.
|
|||
|
||||
**The end result of both of these options is the same, however if you'd like to populate your gallery with more items, use option 2.**
|
||||
|
||||
### *Option 1 - ARM Template & Custom Deployment
|
||||
#### *Option 1 - ARM Template & Custom Deployment
|
||||
If you're not interested in creating a Marketplace item for Puppet, then this quick and easy approach should make things, well, quick and easy for you!
|
||||
|
||||
Firstly, from your MAS-CON01 machine, you need to click on the button below, and fill in the parameter fields. The link should open the Azure Stack portal, and if you're not already logged in, it'll prompt you for your Azure Stack credentials, then take you immediately to the custom template blade.
|
||||
|
||||
<a href="https://adminportal.local.azurestack.external/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FMicrosoft%2FPartsUnlimitedMRP%2Fmaster%2Fdeploy%2Fazurestack%2Finstances%2Fpuppet_standalone%2FPuppet.PuppetEnterprise%2FDeploymentTemplates%2FPuppetDeploy.json" target="_blank">
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/docs/media/DeployToStack.png"/>
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/docs/assets/azurestack/DeployToStack.png"/>
|
||||
</a>
|
||||
|
||||
You'll need to enter information for the following fields:
|
||||
|
@ -48,31 +52,31 @@ You'll need to enter information for the following fields:
|
|||
- **Resource Group** - for testing purposes, use **puppet**.
|
||||
- **Location** - seeing as this is Azure Stack, you'll just be able to choose local in the current technical preview.
|
||||
|
||||
![Puppet Deployment](/deploy/azurestack/docs/media/PuppetDeploy.png)
|
||||
![Puppet Deployment](<../assets/azurestack/PuppetDeploy.png>)
|
||||
|
||||
If you're interested in taking a deeper look at the ARM template that is used for deployment, you could either **click Edit Template** within the custom template deployment blade, and that will present the template that will be used for the deployment, or alternatively, you could **[grab the ARM template from here](/deploy/azurestack/instances/puppet_standalone/Puppet.PuppetEnterprise/DeploymentTemplates/PuppetDeploy.json)**
|
||||
If you're interested in taking a deeper look at the ARM template that is used for deployment, you could either **click Edit Template** within the custom template deployment blade, and that will present the template that will be used for the deployment, or alternatively, you could **[grab the ARM template from here](https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/instances/puppet_standalone/Puppet.PuppetEnterprise/DeploymentTemplates/PuppetDeploy.json)**
|
||||
|
||||
Depending on your hardware, the deployment of the key artifacts, the virtual machine, and its respective automated configuration, may take a while. Expect around 20-30 mins for the deployment, unless you have new hardware, and a bank of SSDs for storage!
|
||||
|
||||
Once the deployment has completed, you're ready to proceed with configuring the Puppet Master.
|
||||
|
||||
### *Option 2 - Create a Custom Marketplace Item for Deployment
|
||||
#### *Option 2 - Create a Custom Marketplace Item for Deployment
|
||||
If you are interested in adding a custom marketplace item for Puppet Enterprise, to your Azure Stack Marketplace, then these steps will help. I've already made the package for you, so you should just be able to follow these steps, and import it right into your Azure Stack.
|
||||
|
||||
As we saw earlier, when we [added our Ubuntu base image to the Azure Stack marketplace](/deploy/azurestack/docs/add_marketplace_item.md), things are much easier when something is packaged for you, so to start things off, pull down the .azpkg file for our Puppet environment, that I've stored on GitHub. From yor **MAS-CON01** machine, do the following:
|
||||
As we saw earlier, when we [added our Ubuntu base image to the Azure Stack marketplace](azurestack-34-marketplace.html), things are much easier when something is packaged for you, so to start things off, pull down the .azpkg file for our Puppet environment, that I've stored on GitHub. From yor **MAS-CON01** machine, do the following:
|
||||
|
||||
- [Download Puppet Enterprise Package](https://github.com/Microsoft/PartsUnlimitedMRP/raw/master/deploy/azurestack/instances/puppet_standalone/Puppet.PuppetEnterprise.1.0.0.azpkg)
|
||||
- [Download Puppet Enterprise Package](https://github.com/Microsoft/PartsUnlimitedMRP/raw/master/deploy/azurestack/instances/puppet_standalone/Puppet.PuppetEnterprise.1.0.0.azpkg?raw=true)
|
||||
|
||||
1. Navigate to your **Puppet.PuppetEnterprise.1.0.0.azpkg** file, you downloaded earlier
|
||||
2. Move it to a newly created folder **C:\MyMarketPlaceItems**.
|
||||
|
||||
It’s important to note that if you are going to use the package I have provided, you need to have used the following info when you uploaded your Ubuntu base VHD image to the platform image repository [earlier](/deploy/azurestack/docs/adding_vm_images.md). Any differences, and the package I’m providing will not reference your uploaded image. If you used an exact copy of my PowerShell upload script, you're all set.
|
||||
It’s important to note that if you are going to use the package I have provided, you need to have used the following info when you uploaded your Ubuntu base VHD image to the platform image repository [earlier](azurestack-33-images.html). Any differences, and the package I’m providing will not reference your uploaded image. If you used an exact copy of my PowerShell upload script, you're all set.
|
||||
|
||||
- Publisher "Canonical"
|
||||
- Offer "UbuntuServer"
|
||||
- SKU "16.04.3-LTS"
|
||||
|
||||
Now that we have the package ready to upload, we need *somewhere* in Azure Stack to upload it to. Fortunately, we [created a storage account for this very purpose earlier](/deploy/azurestack/docs/add_marketplace_item.md#uploading-a-package-to-azure-stack), so we'll use the same storage account for this package.
|
||||
Now that we have the package ready to upload, we need *somewhere* in Azure Stack to upload it to. Fortunately, we [created a storage account for this very purpose earlier](azurestack-34-marketplace.html#uploading-a-package-to-azure-stack), so we'll use the same storage account for this package.
|
||||
|
||||
1. Connect to your Azure Stack via an **administrative PowerShell console**. If you're not still connected from the earlier steps, run the following:
|
||||
|
||||
|
@ -105,11 +109,11 @@ Now that we have the package ready to upload, we need *somewhere* in Azure Stack
|
|||
|
||||
When successful, you should see a **StatusCode** of **Created**
|
||||
|
||||
![Successful Upload](/deploy/azurestack/docs/media/PSCreated.PNG)
|
||||
![Successful Upload](<../assets/azurestack/PSCreated.PNG>)
|
||||
|
||||
Go back and refresh the portal, and under **New -> Virtual Machines -> See All**, you should see your newly added Puppet Enterprise marketplace item
|
||||
|
||||
![Puppet added to Marketplace](/deploy/azurestack/docs/media/PuppetMarketplace.png)
|
||||
![Puppet added to Marketplace](<../assets/azurestack/PuppetMarketplace.png>)
|
||||
|
||||
With your newly created marketplace item created and pushed to the Azure Stack Marketplace, we're ready to deploy an instance of the environment.
|
||||
|
||||
|
@ -124,46 +128,46 @@ With your newly created marketplace item created and pushed to the Azure Stack M
|
|||
|
||||
Once you've filled in the fields, it should look like this:
|
||||
|
||||
![Deploying Puppet](/deploy/azurestack/docs/media/PuppetDeploy.png)
|
||||
![Deploying Puppet](<../assets/azurestack/PuppetDeploy.png>)
|
||||
|
||||
4. Click **OK** to confirm the parameters, and then **Create** to start the deployment.
|
||||
|
||||
Depending on your hardware, the deployment of the key artifacts, the virtual machine, and its respective automated configuration, may take a while. Expect around 20-30 mins for the deployment, unless you have new hardware, and a bank of SSDs for storage!
|
||||
Once the deployment has completed, you're ready to proceed with configuring your Puppet Enterprise Master.
|
||||
|
||||
## Puppet Enterprise Master Setup | Final Steps
|
||||
### Puppet Enterprise Master Setup | Final Steps
|
||||
Regardless of using Option 1, or Option 2, your Puppet Enterprise Master should now be deployed. You can now continue with the configuration of the Puppet Enterprise environment specifically.
|
||||
|
||||
1. In the Azure Stack portal, click on **Resource Groups** and locate the **puppet** resource group.
|
||||
2. Inside the resource group, click on the **puppetmaster** virtual machine, and take note of its **Public IP address/DNS name label**
|
||||
|
||||
![Deploying Puppet](/deploy/azurestack/docs/media/PuppetIP.PNG)
|
||||
![Deploying Puppet](<../assets/azurestack/PuppetIP.PNG>)
|
||||
|
||||
The _dnsaddress_ will be of the form _machinename_._local_.cloudapp.azurestack.external. Open a browser to https://_dnsaddress_. (Make sure you're going to http__s__, not http). You will be prompted about an invalid certificate - it is safe to ignore this for the purposes of this lab. If the Puppet configuration has succeeded, you should see the Puppet Console sign in page:
|
||||
|
||||
![Puppet Login](/deploy/azurestack/docs/media/PuppetLogin.png)
|
||||
![Puppet Login](<../assets/azurestack/PuppetLogin.png>)
|
||||
|
||||
3. On the Puppet Enterprise sign-in screen, enter the username `admin` and the password you set during the deployment. When you log in, you should see a page like this:
|
||||
|
||||
![Puppet Logged in](/deploy/azurestack/docs/media/PuppetLoggedIn.png)
|
||||
![Puppet Logged in](<../assets/azurestack/PuppetLoggedIn.png>)
|
||||
|
||||
Now that we're successfully logged into the Puppet Enterprise Master, we'll quickly deploy an additional virtual machine that will be used for configuration tasks with Puppet.
|
||||
|
||||
## Provisioning the Parts Unlimited MRP Node | Deployment Options
|
||||
### Provisioning the Parts Unlimited MRP Node | Deployment Options
|
||||
|
||||
Now that you have your Puppet Enterprise Master deployed, the fastest way to bring another node under its management will be to deploy an additional VM, into the **same resource group** and the **same virtual network**. That way, the 2 VMs can talk to one another easily, resolve DNS easily etc. It also simplifies management with them within this small POC network.
|
||||
|
||||
Now in order to streamline this, I've created an ARM template for you to use - all you need to do is grab it from here:
|
||||
|
||||
- **[Additional Puppet Node](/deploy/azurestack/instances/puppet_node/AddPuppetNode.json)**
|
||||
- **[Additional Puppet Node](https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/instances/puppet_node/AddPuppetNode.json)**
|
||||
|
||||
Alternatively, for those of you who like to press buttons, and would like a simple option for deploying without copying and pasting, click the button below from your **MAS-CON01** machine, and fill in the parameter fields. The link should open the Azure Stack admin portal, and if you're not already logged in, it'll prompt you for your Azure Stack credentials, then take you immediately to the custom template blade:
|
||||
|
||||
<a href="https://adminportal.local.azurestack.external/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FMicrosoft%2FPartsUnlimitedMRP%2Fmaster%2Fdeploy%2Fazurestack%2Finstances%2Fpuppet_node%2FAddPuppetNode.json" target="_blank">
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/docs/media/DeployToStack.png"/>
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/docs/assets/azurestack/DeployToStack.png"/>
|
||||
</a>
|
||||
|
||||
This node is based on the [Ubuntu base image that we added to the Azure Stack marketplace earlier](/deploy/azurestack/docs/add_marketplace_item.md). The only difference here is, the template creates the corresponding VM inside the same resource group, and virtual network as our Puppet Enterprise Master, and opens a couple of necessary ports in the network security group.
|
||||
This node is based on the [Ubuntu base image that we added to the Azure Stack marketplace earlier](azurestack-34-marketplace.html). The only difference here is, the template creates the corresponding VM inside the same resource group, and virtual network as our Puppet Enterprise Master, and opens a couple of necessary ports in the network security group.
|
||||
|
||||
You'll need to enter information for the following fields:
|
||||
- **ADMINUSERNAME** - accept the default of **localadmin**.
|
||||
|
@ -172,7 +176,7 @@ You'll need to enter information for the following fields:
|
|||
- **Resource Group** - for testing purposes, select existing, and use the drop down to select **puppet**.
|
||||
- **Location** - this will already be selected based on the resource group you choose.
|
||||
|
||||
![MRP Deployment](/deploy/azurestack/docs/media/AddPuppetNode.PNG)
|
||||
![MRP Deployment](<../assets/azurestack/AddPuppetNode.PNG>)
|
||||
|
||||
If you're interested in taking a deeper look at the ARM template that is used for deployment, you could either **click Edit Template** within the custom template deployment blade, and that will present the template that will be used for the deployment.
|
||||
|
||||
|
@ -180,14 +184,14 @@ Depending on your hardware, the deployment of the virtual machine, and its respe
|
|||
|
||||
Once the deployment has completed, you're ready to proceed with configuring the Puppet Master.
|
||||
|
||||
# Next steps
|
||||
## Next steps
|
||||
|
||||
In this lab, you learned how to setup deploy Puppet Enterprise on Azure Stack, and deploy an initial node that will be configured with Puppet Enterprise. In the next lab, you'll walk through deploying the Parts Unlimited MRP app, to this node, from Puppet Enterprise.
|
||||
|
||||
- [Parts Unlimited MRP Continous Deployment with Puppet Enterprise](/deploy/azurestack/docs/puppet_CD.md)
|
||||
- [Parts Unlimited MRP Continous Deployment with Puppet Enterprise](azurestack-40-puppet-cd.html)
|
||||
|
||||
## Continuous Feedback
|
||||
### Continuous Feedback
|
||||
|
||||
#### Issues / Questions about this Hands-On-Lab?
|
||||
##### Issues / Questions about this Hands-On-Lab?
|
||||
|
||||
[If you are encountering issues or have questions during this Hands on Labs, please open an issue by clicking here](https://github.com/Microsoft/PartsUnlimitedMRP/issues)
|
||||
[If you are encountering issues or have questions during this Hands on Labs, please open an issue by clicking here](https://github.com/Microsoft/PartsUnlimitedMRP/issues)
|
|
@ -1,16 +1,20 @@
|
|||
# Continuous Deployment with Puppet Enterprise
|
||||
|
||||
---
|
||||
layout: page
|
||||
title: Continuous Deployment with Puppet
|
||||
category: AzureStack
|
||||
order: 10
|
||||
---
|
||||
In this lab, you will learn how to deploy the Parts Unlimited MRP App in an automated fashion onto a Linux VM with Puppet Enterprise.
|
||||
After this lab, you will have a working continuous deployment environment in Puppet that will deploy the Parts Unlimited MRP app to a Virtual Machine in Azure Stack.
|
||||
|
||||
## Pre-Requisites:
|
||||
### Pre-Requisites:
|
||||
|
||||
- Completion of the lab [Setup Environment | Continuous Deployment with Puppet](/deploy/azurestack/docs/puppet_setup.md)
|
||||
- Completion of the lab [Setup Continuous Deployment with Puppet](azurestack-39-puppet-setup.html)
|
||||
|
||||
## Overview:
|
||||
### Overview:
|
||||
During this lab, we will finalize configuration of Puppet Enterprise to manage the additional virtual machine that was also deployed in the previous lab, and once under management, deploy the Parts Unlimited MRP app in an automated fashion.
|
||||
|
||||
## Install Puppet Agent on the Node
|
||||
### Install Puppet Agent on the Node
|
||||
|
||||
First, we need to bring our previously deployed Ubuntu VM under the management of the Puppet Enterprise Master. To do that, you'll first need to log into the Puppet Enterprise Master.
|
||||
|
||||
|
@ -18,11 +22,11 @@ If it's not already open, on MAS-CON01, open a browser and navigate to your Pupp
|
|||
|
||||
You will be prompted about an invalid certificate - it is safe to ignore this for the purposes of this lab. If the Puppet configuration has succeeded, you should see the Puppet Console sign in page:
|
||||
|
||||
![Puppet Login](/deploy/azurestack/docs/media/PuppetLogin.png)
|
||||
![Puppet Login](<../assets/azurestack/PuppetLogin.png>)
|
||||
|
||||
On the Puppet Enterprise sign-in screen, enter the username `admin` and the password you set during the deployment. When you log in, you should see a page like this:
|
||||
|
||||
![Puppet Logged in](/deploy/azurestack/docs/media/PuppetLoggedIn.png)
|
||||
![Puppet Logged in](<../assets/azurestack/PuppetLoggedIn.png>)
|
||||
|
||||
Now that we're successfully logged into the Puppet Enterprise Master, you are now ready to add the node to the Puppet Master. Once the node is added, the Puppet Master will be able to configure the node.
|
||||
|
||||
|
@ -34,7 +38,7 @@ Before we do that however, we'll need to connect to our newly deployed **puppetn
|
|||
|
||||
3. The details of **puppetnode1** should be displayed, and should look similar to these below:
|
||||
|
||||
![Puppet Node IP](/deploy/azurestack/docs/media/PuppetNodeDeployed.PNG)
|
||||
![Puppet Node IP](<../assets/azurestack/PuppetNodeDeployed.PNG>)
|
||||
|
||||
4. Make a note of the IP and DNS name. If you've followed the steps, your DNS name should be puppetnode1.local.cloudapp.azurestack.external.
|
||||
|
||||
|
@ -47,24 +51,24 @@ Once you're all connected, you're ready to start connecting this node with the P
|
|||
```
|
||||
puppetmaster.6786122c-04f9-4ccb-8ff4-21476954ec5f.internal.azurestack.local
|
||||
```
|
||||
![Puppet Unsigned Certs](/deploy/azurestack/docs/media/PuppetUnsignedCerts.png)
|
||||
![Puppet Unsigned Certs](<../assets/azurestack/PuppetUnsignedCerts.png>)
|
||||
|
||||
2. Copy the "Add Node" command from the Puppet Console (the one that starts with `curl...`), then switch back to your Putty session, and paste the code into the window, then run it. Note, if it appears that nothing is happening, you may need to press Enter after initially running the line of code, to trigger a sudo password prompt. From there, it should run to completion.
|
||||
|
||||
![Puppet Run Script](/deploy/azurestack/docs/media/PuppetAddNodePutty.PNG)
|
||||
![Puppet Run Script](<../assets/azurestack/PuppetAddNodePutty.PNG>)
|
||||
|
||||
The command will take a few moments to complete. From here on, you will configure the node only from the Puppet Master, though you will use the Putty to manually force Puppet to configure it.
|
||||
|
||||
3. Return to the Puppet Console and refresh the Unsigned Certificates page (where you previously got the node install command). You should see a pending request. This request has come from the node and will authorize the certificate between the puppet master and the node so that they can communicate securely. Press "Accept" to approve the node:
|
||||
|
||||
![Accept Puppet Node](/deploy/azurestack/docs/media/PuppetAddNodeAccept.PNG)
|
||||
![Accept Puppet Node](<../assets/azurestack/PuppetAddNodeAccept.PNG>)
|
||||
|
||||
Click on the "Nodes" tab in the Puppet Console to return to the nodes view. You should see 2 nodes listed:
|
||||
the puppet master and the new node (it may take a few minutes for the additional node to finish configuration before it appears)
|
||||
|
||||
![Accept Puppet Node](/deploy/azurestack/docs/media/PuppetNodeAdded.PNG)
|
||||
![Accept Puppet Node](<../assets/azurestack/PuppetNodeAdded.PNG>)
|
||||
|
||||
## Configure the Puppet Production Environment
|
||||
### Configure the Puppet Production Environment
|
||||
|
||||
The Parts Unlimited MRP application is a Java application that requires [mongodb](https://www.mongodb.org/)
|
||||
and [tomcat](http://tomcat.apache.org/) to be installed and configured on the Parts Unlimited MRP machine (the node). Instead of
|
||||
|
@ -103,7 +107,7 @@ in `/etc/puppetlabs/code/environments/production`.
|
|||
sudo puppet module install maestrodev-wget
|
||||
```
|
||||
|
||||
![Add Modules](/deploy/azurestack/docs/media/PuppetInstallModules.PNG)
|
||||
![Add Modules](<../assets/azurestack/PuppetInstallModules.PNG>)
|
||||
|
||||
>**Note:** The `mongodb` and `tomcat` modules are supported modules from the Forge. The `wget` module is
|
||||
a user module and so is not officially supported.
|
||||
|
@ -120,7 +124,7 @@ in `/etc/puppetlabs/code/environments/production`.
|
|||
|
||||
Running `ls -la` should list the modules available so far, including `mrpapp`:
|
||||
|
||||
![Added Module](/deploy/azurestack/docs/media/PuppetLSLa.PNG)
|
||||
![Added Module](<../assets/azurestack/PuppetLSLa.PNG>)
|
||||
|
||||
1. We are going to define the node's configuration in the `mrpapp` module. The configuration of the nodes in the production environment is defined in a `site.pp` file in the production `manifests` folder (the `.pp` extension is short for "puppet program"). Let's edit the `site.pp` file and define the configuration for our node:
|
||||
|
||||
|
@ -142,7 +146,7 @@ in `/etc/puppetlabs/code/environments/production`.
|
|||
currently empty) is in the `modules` folder of the production environment, so Puppet will know where to find
|
||||
it.
|
||||
|
||||
## Test the Production Environment Configuration
|
||||
### Test the Production Environment Configuration
|
||||
|
||||
Before we fully describe the MRP app for the node, let's test that everything is hooked up correctly by
|
||||
configuring a "dummy" file in the `mrpapp` module. If Puppet executes and creates the dummy file, then we can
|
||||
|
@ -191,7 +195,7 @@ flesh out the rest of the module properly.
|
|||
cat /tmp/dummy.txt
|
||||
```
|
||||
|
||||
![Added Dummy Text File](/deploy/azurestack/docs/media/PuppetRules.PNG)
|
||||
![Added Dummy Text File](<../assets/azurestack/PuppetRules.PNG>)
|
||||
|
||||
2. Puppet will automatically detect configuration drift and fix it. By default, the agent runs every 30 minutes on the nodes. Each time the agent runs, Puppet will determine if the environment is in the correct state - if it is not, it will reapply classes as necessary.
|
||||
|
||||
|
@ -206,12 +210,12 @@ flesh out the rest of the module properly.
|
|||
|
||||
You should see the run complete successfully and the file should exist again.
|
||||
|
||||
![Added Dummy Text File](/deploy/azurestack/docs/media/PuppetRules2.PNG)
|
||||
![Added Dummy Text File](<../assets/azurestack/PuppetRules2.PNG>)
|
||||
|
||||
You can also try to edit the contents of the file and re-run the `sudo puppet agent --test` command to see the
|
||||
contents update.
|
||||
|
||||
## Create a Puppet Program to Describe the Prerequisites for the MRP Application
|
||||
### Create a Puppet Program to Describe the Prerequisites for the MRP Application
|
||||
|
||||
Now that we have hooked up the node (partsmrp) to the Puppet Master, we can begin to write the Puppet Program
|
||||
that will describe the prerequisites for the Parts Unlimited MRP application.
|
||||
|
@ -222,7 +226,7 @@ manifests or modules as they grow. This would promote reuse - just as in any goo
|
|||
|
||||
>**Note:** You can see the complete `init.pp` file [here](https://github.com/Microsoft/PartsUnlimitedMRP/blob/master/docs/HOL_Deploying-Using-Puppet/final/init.pp).
|
||||
|
||||
### Configure MongoDb
|
||||
#### Configure MongoDb
|
||||
|
||||
Let's add a class to configure mongodb. Once mongodb is configured, we want Puppet to download a mongo script that contains some data for our application's database. We'll include this as part of the mongodb setup.
|
||||
|
||||
|
@ -276,7 +280,7 @@ command again.
|
|||
|
||||
Press `ctrl-O`, then `enter` to save the changes to the file without exiting.
|
||||
|
||||
### Configure Java
|
||||
#### Configure Java
|
||||
|
||||
Add the following class below the `configuremongodb` class:
|
||||
|
||||
|
@ -303,7 +307,7 @@ why we needed to add the PPA using the `apt` module.
|
|||
|
||||
Press `ctrl-O`, then `enter` to save the changes to the file without exiting.
|
||||
|
||||
### Configure Tomcat
|
||||
#### Configure Tomcat
|
||||
|
||||
Let's add a class below the `configurejava` class to configure `tomcat`:
|
||||
|
||||
|
@ -339,7 +343,7 @@ Let's examine this class:
|
|||
|
||||
Press `ctrl-O`, then `enter` to save the changes to the file without exiting.
|
||||
|
||||
### Deploy a WAR File
|
||||
#### Deploy a WAR File
|
||||
|
||||
The MRP application is compiled into a WAR file that Tomcat then uses to serve pages.
|
||||
|
||||
|
@ -365,7 +369,7 @@ Let's examine this class:
|
|||
- Line 5: We set the `catalina base` directory so that Puppet deploys the war to our Tomcat service
|
||||
- Line 6: We use the tomcat module's `war` resource to deploy our war from the `war_source`
|
||||
|
||||
### Start the Ordering Service
|
||||
#### Start the Ordering Service
|
||||
|
||||
The MRP service calls an Ordering Service, which is a REST API managing orders in the MongoDb. This service is compiled to a
|
||||
jar file. We'll need to copy the jar file to our node and then run it in the background so that it can listen for requests.
|
||||
|
@ -420,7 +424,7 @@ Let's examine this class:
|
|||
|
||||
>**Note:** We need to wait after running the `java` command since this service needs to be running before we start Tomcat, otherwise Tomcat grabs the port that the ordering service needs to listen on.
|
||||
|
||||
### Complete the mrpapp Resource
|
||||
#### Complete the mrpapp Resource
|
||||
|
||||
Go back to the top of the file and change the `mrpapp` class to look as follows to run all our resources:
|
||||
|
||||
|
@ -436,7 +440,7 @@ class mrpapp {
|
|||
|
||||
Press `ctrl-O`, then `enter` to save the changes to the file without exiting.
|
||||
|
||||
## Run the Puppet Configuration on the Node
|
||||
### Run the Puppet Configuration on the Node
|
||||
|
||||
1. On the partsmrp SSH session, again force Puppet to update the node's configuration:
|
||||
```sh
|
||||
|
@ -447,28 +451,26 @@ Press `ctrl-O`, then `enter` to save the changes to the file without exiting.
|
|||
it will verify that the existing environment is correctly configured - that should be much quicker since the services will already
|
||||
be installed and configured.
|
||||
|
||||
2. We need to check if Tomcat is running, so open a browser and browse to port `9080` of the partsmrp machine. You can get the name of the machine by clicking on the Public IP. If you've followed the steps exactly, it should be puppetnode1.local.cloudapp.azurestack.external. You can check in the Azure Stack portal (just like you did to get the url of the puppet master earlier). Once you open the browser, you should see the following Tomcat confirmation page:
|
||||
2. We need to check if Tomcat is running, so open a browser and browse to port `9080` of the partsmrp machine. You can get the name of the machine by clicking on the Public IP. If you've followed the steps exactly, it should be puppetnode1.local.cloudapp.azurestack.external. You can check in the Azure Stack portal (just like you did to get the url of the puppet master earlier). Once you open the browser, you should see the following Tomcat confirmation page:
|
||||
|
||||
![Tomcat Running](/deploy/azurestack/docs/media/PuppetTomcat.PNG)
|
||||
![Tomcat Running](<../assets/azurestack/PuppetTomcat.PNG>)
|
||||
|
||||
3. Now you can ensure that the configuration is correct by opening a browser to the Parts Unlimited MRP application. The address
|
||||
will be http://puppetnode1.local.cloudapp.azurestack.external:9080/mrp, assuming you used puppetnode1 as your chosen VM name.
|
||||
|
||||
![Tomcat Running](/deploy/azurestack/docs/media/PuppetPartsMRPRunning.PNG)
|
||||
![Tomcat Running](<../assets/azurestack/PuppetPartsMRPRunning.PNG>)
|
||||
|
||||
# Next steps
|
||||
## Next steps
|
||||
|
||||
In this lab, you learned how to create the Puppet infrastructure and deploy the Parts Unlimited MRP app to the nodes while managing configuration drift. You can follow the steps again to deploy additional nodes under management. Each Puppet Enterprise deployment allows you to manage up to 10 nodes for free - great for learning and development!
|
||||
|
||||
If you're interested in learning more about DevOps tooling on Azure Stack, check out these Hands-On-Labs:
|
||||
|
||||
- [Continuous Deployment with Jenkins](/deploy/azurestack/docs/jenkins_setup.md)
|
||||
- [Continuous Deployment with Chef](/deploy/azurestack/docs/chef_setup.md)
|
||||
- [Continuous Deployment with Jenkins](azurestack-36-jenkins-setup.html)
|
||||
- [Continuous Deployment with Chef](azurestack-41-chef-setup.html)
|
||||
|
||||
# Continuous Feedback
|
||||
### Continuous Feedback
|
||||
|
||||
#### Issues / Questions about this Hands-On-Lab ??
|
||||
##### Issues / Questions about this Hands-On-Lab ??
|
||||
|
||||
[If you are encountering issues or have questions during this Hands on Labs, please open an issue by clicking here](https://github.com/Microsoft/PartsUnlimitedMRP/issues)
|
||||
|
||||
Thanks
|
|
@ -1,13 +1,17 @@
|
|||
# Setup Environment | Continuous Deployment with Chef
|
||||
|
||||
---
|
||||
layout: page
|
||||
title: Setup Continuous Deployment with Chef
|
||||
category: AzureStack
|
||||
order: 11
|
||||
---
|
||||
In this multi-part lab, we will setup a Chef Server in Azure Stack, that will be used for Continuous Deployment of the Parts Unlimited MRP project. This hands-on lab is designed to point out new features, discuss and describe them, and enable you to understand these features as part of the DevOps Lifecycle.
|
||||
|
||||
## Prerequisites
|
||||
### Prerequisites
|
||||
There are a couple of key things you'll need to have in place before setting up this lab environment, which, if you've been following the steps across other labs so far, you should already have most of them :-)
|
||||
|
||||
- A configured Azure Stack, logged into MAS-CON01
|
||||
- The Azure Stack Tools downloaded to MAS-CON01 ([Details here](/deploy/azurestack/docs/adding_vm_images.md#connecting-to-azure-stack-via-powershell))
|
||||
- An Ubuntu base image in the Platform Image Repository ([Details here](/deploy/azurestack/docs/adding_vm_images.md#add-vm-image-to-platform-image-repository-with-powershell))
|
||||
- The Azure Stack Tools downloaded to MAS-CON01 ([Details here](azurestack-33-images.html#connecting-to-azure-stack-via-powershell))
|
||||
- An Ubuntu base image in the Platform Image Repository ([Details here](azurestack-33-images.html#add-vm-image-to-platform-image-repository-with-powershell))
|
||||
- Putty installed on MAS-CON01 (use the script below, from an administrative PowerShell console to download)
|
||||
|
||||
```powershell
|
||||
|
@ -23,8 +27,8 @@ Once you've got all those sorted, you're ready to deploy the environment. In thi
|
|||
- Bootstrap the MRP App Server and Deploy the Application: You will bootstrap the MRP app and use the role that you previously created to deploy the app.
|
||||
- Remediating Configuration Changes: You will see how Chef reacts when changes happen to the configuration and how Chef resolves issues.
|
||||
|
||||
## Provision the Lab | Enable Syndication
|
||||
In previous labs, you'll have seen that whether we are deploying Jenkins, Puppet, or just a regular Linux VM, we've been using an Ubuntu image that we added to the Azure Stack Platform Image Repository ([earlier](/deploy/azurestack/docs/adding_vm_images.md#add-vm-image-to-platform-image-repository-with-powershell)). We essentially 'sideloaded' this image into Azure Stack, and from there, we used it with a number of ARM templates to deploy specific workloads.
|
||||
### Provision the Lab | Enable Syndication
|
||||
In previous labs, you'll have seen that whether we are deploying Jenkins, Puppet, or just a regular Linux VM, we've been using an Ubuntu image that we added to the Azure Stack Platform Image Repository ([earlier](azurestack-33-images.html#add-vm-image-to-platform-image-repository-with-powershell)). We essentially 'sideloaded' this image into Azure Stack, and from there, we used it with a number of ARM templates to deploy specific workloads.
|
||||
|
||||
There is, however, another way to populate your Azure Stack Platform Image Repository, and also, the Azure Stack Marketplace. This alternative method is known as **Marketplace Syndication**.
|
||||
|
||||
|
@ -32,7 +36,7 @@ There is, however, another way to populate your Azure Stack Platform Image Repos
|
|||
|
||||
To download marketplace items into Azure Stack, you've first got to register Azure Stack with Azure.
|
||||
|
||||
### Register Azure Stack with Azure
|
||||
#### Register Azure Stack with Azure
|
||||
|
||||
To register your Azure Stack with Azure, you'll need to perform a few steps **from the Azure Stack Host**, not MAS-CON01. Before registering, you'll need the following info:
|
||||
|
||||
|
@ -64,26 +68,26 @@ Once you have those details, you're ready to register your Azure Stack. Remembe
|
|||
6. At the two prompts, press Enter.
|
||||
7. In the pop-up log in window, enter your Azure subscription credentials
|
||||
|
||||
### Verify the registration
|
||||
#### Verify the registration
|
||||
|
||||
1. Sign in to the Azure Stack portal as a service administrator.
|
||||
2. Click **More Services** > **Marketplace Management** > **Add from Azure**.
|
||||
3. If you see a list of items available from Azure (such as WordPress), your activation was successful.
|
||||
|
||||
## Provision the Lab | Syndicate Windows Server
|
||||
### Provision the Lab | Syndicate Windows Server
|
||||
|
||||
For the purpose of this lab, we're going to select to syndicate the Windows Server 2012 R2 Datacenter - Eval gallery item. This is smaller than the 2016 version, and thus quicker to download and test. In order to kick off the syndication, perform the following steps:
|
||||
|
||||
1. Ensure you are logged into **MAS-CON01** and signed in to the Azure Stack portal as a service administrator.
|
||||
2. Click **More Services** > **Marketplace Management** > **Add from Azure**. You should see a list of available options, including multiple Windows Server offerings:
|
||||
|
||||
![Successful Upload](/deploy/azurestack/docs/media/WindowsServerSyndication.PNG)
|
||||
![Successful Upload](<../assets/azurestack/WindowsServerSyndication.PNG>)
|
||||
|
||||
3. As mentioned earlier, click on **Windows Server 2012 R2 Datacenter - Eval** and when the new blade opens, click on **Download**
|
||||
|
||||
The download will take a while, depending on your connection speed. You will recieve a notification in the Azure Stack portal once it's complete. The benefit of this approach is that the VHD will be downloaded into the Azure Stack Platform Image Repository, and in addition, a gallery item and default ARM template will also appear in your Azure Stack Marketplace view, so tenants/users will be able to deploy new instances of Windows Server 2012 R2 on your Azure Stack, and you haven't had to build any custom packages to enable the functionality.
|
||||
|
||||
## Provision the Lab | Chef Server Deployment Options
|
||||
### Provision the Lab | Chef Server Deployment Options
|
||||
|
||||
With the Windows Server image downloading, we can turn our attention to preparing for deployment of a Chef Server within Azure Stack. As it stands, there is no Chef offering available for syndication today, thus, we must sideload our own, as we have done for the previous labs, for both Jenkins and Puppet.
|
||||
|
||||
|
@ -94,13 +98,13 @@ Now, you have 2 options for deployment.
|
|||
|
||||
**The end result of both of these options is the same, however if you'd like to populate your gallery with more items, use option 2.**
|
||||
|
||||
### *Option 1 - ARM Template & Custom Deployment
|
||||
#### *Option 1 - ARM Template & Custom Deployment
|
||||
If you're not interested in creating a Marketplace item for Chef Server, then this quick and easy approach should make things, well, quick and easy for you!
|
||||
|
||||
Firstly, from your MAS-CON01 machine, you need to click on the button below, and fill in the parameter fields. The link should open the Azure Stack portal, and if you're not already logged in, it'll prompt you for your Azure Stack credentials, then take you immediately to the custom template blade.
|
||||
|
||||
<a href="https://adminportal.local.azurestack.external/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FMicrosoft%2FPartsUnlimitedMRP%2Fmaster%2Fdeploy%2Fazurestack%2Finstances%2Fchef_standalone%2FChef.ChefServer%2FDeploymentTemplates%2FChefDeploy.json" target="_blank">
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/docs/media/DeployToStack.png"/>
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/docs/assets/azurestack/DeployToStack.png"/>
|
||||
</a>
|
||||
|
||||
You'll need to enter information for the following fields:
|
||||
|
@ -111,31 +115,31 @@ You'll need to enter information for the following fields:
|
|||
- **Resource Group** - for testing purposes, use **chefmrp**.
|
||||
- **Location** - seeing as this is Azure Stack, you'll just be able to choose local in the current technical preview.
|
||||
|
||||
![Chef Deployment](/deploy/azurestack/docs/media/ChefDeploy.PNG)
|
||||
![Chef Deployment](<../assets/azurestack/ChefDeploy.PNG>)
|
||||
|
||||
If you're interested in taking a deeper look at the ARM template that is used for deployment, you could either **click Edit Template** within the custom template deployment blade, and that will present the template that will be used for the deployment, or alternatively, you could **[grab the ARM template from here](/deploy/azurestack/instances/chef_standalone/Chef.ChefServer/DeploymentTemplates/ChefDeploy.json)**
|
||||
If you're interested in taking a deeper look at the ARM template that is used for deployment, you could either **click Edit Template** within the custom template deployment blade, and that will present the template that will be used for the deployment, or alternatively, you could **[grab the ARM template from here](https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/instances/chef_standalone/Chef.ChefServer/DeploymentTemplates/ChefDeploy.json)**
|
||||
|
||||
Depending on your hardware, the deployment of the key artifacts, the virtual machine, and its respective automated configuration, may take a while. Expect around 20-30 mins for the deployment, unless you have new hardware, and a bank of SSDs for storage!
|
||||
|
||||
Once the deployment has completed, you're ready to proceed with deploying the additional resources.
|
||||
|
||||
### *Option 2 - Create a Custom Marketplace Item for Deployment
|
||||
#### *Option 2 - Create a Custom Marketplace Item for Deployment
|
||||
If you are interested in adding a custom marketplace item for Chef Server, to your Azure Stack Marketplace, then these steps will help. I've already made the package for you, so you should just be able to follow these steps, and import it right into your Azure Stack.
|
||||
|
||||
As we saw earlier, when we [added our Ubuntu base image to the Azure Stack marketplace](/deploy/azurestack/docs/add_marketplace_item.md), things are much easier when something is packaged for you, so to start things off, pull down the .azpkg file for our Chef environment, that I've stored on GitHub. From yor **MAS-CON01** machine, do the following:
|
||||
As we saw earlier, when we [added our Ubuntu base image to the Azure Stack marketplace](azurestack-34-marketplace.html), things are much easier when something is packaged for you, so to start things off, pull down the .azpkg file for our Chef environment, that I've stored on GitHub. From yor **MAS-CON01** machine, do the following:
|
||||
|
||||
- [Download Chef Server Package](/deploy/azurestack/instances/chef_standalone/Chef.ChefServer.1.0.0.azpkg)
|
||||
- [Download Chef Server Package](https://github.com/Microsoft/PartsUnlimitedMRP/blob/master/deploy/azurestack/instances/chef_standalone/Chef.ChefServer.1.0.0.azpkg?raw=true)
|
||||
|
||||
1. Navigate to your **Chef.ChefServer.1.0.0.azpkg** file, you downloaded earlier
|
||||
2. Move it to a newly created folder **C:\MyMarketPlaceItems**.
|
||||
|
||||
It’s important to note that if you are going to use the package I have provided, you need to have used the following info when you uploaded your Ubuntu base VHD image to the platform image repository [earlier](/deploy/azurestack/docs/adding_vm_images.md). Any differences, and the package I’m providing will not reference your uploaded image. If you used an exact copy of my PowerShell upload script, you're all set.
|
||||
It’s important to note that if you are going to use the package I have provided, you need to have used the following info when you uploaded your Ubuntu base VHD image to the platform image repository [earlier](azurestack-33-images.html). Any differences, and the package I’m providing will not reference your uploaded image. If you used an exact copy of my PowerShell upload script, you're all set.
|
||||
|
||||
- Publisher "Canonical"
|
||||
- Offer "UbuntuServer"
|
||||
- SKU "16.04.3-LTS"
|
||||
|
||||
Now that we have the package ready to upload, we need *somewhere* in Azure Stack to upload it to. Fortunately, we [created a storage account for this very purpose earlier](/deploy/azurestack/docs/add_marketplace_item.md#uploading-a-package-to-azure-stack), so we'll use the same storage account for this package.
|
||||
Now that we have the package ready to upload, we need *somewhere* in Azure Stack to upload it to. Fortunately, we [created a storage account for this very purpose earlier](azurestack-34-marketplace.html#uploading-a-package-to-azure-stack), so we'll use the same storage account for this package.
|
||||
|
||||
1. Connect to your Azure Stack via an **administrative PowerShell console**. If you're not still connected from the earlier steps, run the following:
|
||||
|
||||
|
@ -168,11 +172,11 @@ Now that we have the package ready to upload, we need *somewhere* in Azure Stack
|
|||
|
||||
When successful, you should see a **StatusCode** of **Created**
|
||||
|
||||
![Successful Upload](/deploy/azurestack/docs/media/PSCreated.PNG)
|
||||
![Successful Upload](<../assets/azurestack/PSCreated.PNG>)
|
||||
|
||||
Go back and refresh the portal, and under **New -> Virtual Machines -> See All**, you should see your newly added Chef Server marketplace item
|
||||
|
||||
![Chef Server added to Marketplace](/deploy/azurestack/docs/media/ChefMarketplace.PNG)
|
||||
![Chef Server added to Marketplace](<../assets/azurestack/ChefMarketplace.PNG>)
|
||||
|
||||
With your newly created marketplace item created and pushed to the Azure Stack Marketplace, we're ready to deploy an instance of the environment.
|
||||
|
||||
|
@ -187,24 +191,24 @@ With your newly created marketplace item created and pushed to the Azure Stack M
|
|||
|
||||
Once you've filled in the fields, it should look like this:
|
||||
|
||||
![Deploying Chef](/deploy/azurestack/docs/media/ChefDeploy.PNG)
|
||||
![Deploying Chef](<../assets/azurestack/ChefDeploy.PNG>)
|
||||
|
||||
4. Click **OK** to confirm the parameters, and then **Create** to start the deployment.
|
||||
|
||||
Depending on your hardware, the deployment of the key artifacts, the virtual machine, and its respective automated configuration, may take a while. Expect around 20-30 mins for the deployment, unless you have new hardware, and a bank of SSDs for storage!
|
||||
Once the deployment has completed, you're ready to proceed with configuring the rest of the environment.
|
||||
|
||||
## Provision the Lab | Deploy Windows Server Workstation
|
||||
### Provision the Lab | Deploy Windows Server Workstation
|
||||
With out Chef Server deployed, we can move on to deploying our Chef Workstation, which we'll use for administration of the Chef environment. In this lab, it will be a Windows Server-based virtual machine, that we will deploy into the same resource group and virtual network as the existing Chef Server. That way, the 2 VMs can talk to one another easily, resolve DNS easily etc. It also simplifies management with them within this small POC network.
|
||||
|
||||
Now in order to streamline this, I've created an ARM template for you to use - all you need to do is grab it from here:
|
||||
|
||||
- **[Deploy Chef Workstation](/deploy/azurestack/instances/chef_workstation/AddChefWorkstation.json)**
|
||||
- **[Deploy Chef Workstation](https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/instances/chef_workstation/AddChefWorkstation.json)**
|
||||
|
||||
Alternatively, for those of you who like to press buttons, and would like a simple option for deploying without copying and pasting, click the button below from your **MAS-CON01** machine, and fill in the parameter fields. The link should open the Azure Stack admin portal, and if you're not already logged in, it'll prompt you for your Azure Stack credentials, then take you immediately to the custom template blade:
|
||||
|
||||
<a href="https://adminportal.local.azurestack.external/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FMicrosoft%2FPartsUnlimitedMRP%2Fmaster%2Fdeploy%2Fazurestack%2Finstances%2Fchef_workstation%2FAddChefWorkstation.json" target="_blank">
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/docs/media/DeployToStack.png"/>
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/docs/assets/azurestack/DeployToStack.png"/>
|
||||
</a>
|
||||
|
||||
You'll need to enter information for the following fields:
|
||||
|
@ -214,7 +218,7 @@ You'll need to enter information for the following fields:
|
|||
- **Resource Group** - for testing purposes, select existing, and use the drop down to select **chefmrp**.
|
||||
- **Location** - this will already be selected based on the resource group you choose.
|
||||
|
||||
![Chef Workstation Deployment](/deploy/azurestack/docs/media/ChefWorkstationDeploy.PNG)
|
||||
![Chef Workstation Deployment](<../assets/azurestack/ChefWorkstationDeploy.PNG>)
|
||||
|
||||
If you're interested in taking a deeper look at the ARM template that is used for deployment, you could either **click Edit Template** within the custom template deployment blade, and that will present the template that will be used for the deployment.
|
||||
|
||||
|
@ -222,17 +226,17 @@ Depending on your hardware, the deployment of the virtual machine, and its respe
|
|||
|
||||
You dont have to wait for it to complete, instead, we can move on to deploying our 3rd virtual machine, that will be managed by Chef -this will be our Linux node, that will be based on the Ubuntu image that's already within our Platform Image Respository.
|
||||
|
||||
## Provision the Lab | Deploy Linux MRP Node
|
||||
### Provision the Lab | Deploy Linux MRP Node
|
||||
With out Chef Server and Workstation deployed, we can move on to deploying a node which we'll manage with Chef, and deploy our Parts Unlimited MRP app onto. This will be a Linux node, deployed into the same resource group and virtual network as the other two virtual machines, thus making communication between the VMs, easy.
|
||||
|
||||
Now in order to streamline this, I've created an ARM template for you to use - all you need to do is grab it from here:
|
||||
|
||||
- **[Deploy Chef Node](/deploy/azurestack/instances/chef_node/AddChefNode.json)**
|
||||
- **[Deploy Chef Node](https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/instances/chef_node/AddChefNode.json)**
|
||||
|
||||
Alternatively, for those of you who like to press buttons, and would like a simple option for deploying without copying and pasting, click the button below from your **MAS-CON01** machine, and fill in the parameter fields. The link should open the Azure Stack admin portal, and if you're not already logged in, it'll prompt you for your Azure Stack credentials, then take you immediately to the custom template blade:
|
||||
|
||||
<a href="https://adminportal.local.azurestack.external/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FMicrosoft%2FPartsUnlimitedMRP%2Fmaster%2Fdeploy%2Fazurestack%2Finstances%2Fchef_node%2FAddChefNode.json" target="_blank">
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/deploy/azurestack/docs/media/DeployToStack.png"/>
|
||||
<img src="https://raw.githubusercontent.com/Microsoft/PartsUnlimitedMRP/master/docs/assets/azurestack/DeployToStack.png"/>
|
||||
</a>
|
||||
|
||||
You'll need to enter information for the following fields:
|
||||
|
@ -242,7 +246,7 @@ You'll need to enter information for the following fields:
|
|||
- **Resource Group** - for testing purposes, select existing, and use the drop down to select **chefmrp**.
|
||||
- **Location** - this will already be selected based on the resource group you choose.
|
||||
|
||||
![Chef Node Deployment](/deploy/azurestack/docs/media/AddChefNode.PNG)
|
||||
![Chef Node Deployment](<../assets/azurestack/AddChefNode.PNG>)
|
||||
|
||||
If you're interested in taking a deeper look at the ARM template that is used for deployment, you could either **click Edit Template** within the custom template deployment blade, and that will present the template that will be used for the deployment.
|
||||
|
||||
|
@ -250,14 +254,14 @@ Depending on your hardware, the deployment of the virtual machine, and its respe
|
|||
|
||||
Once this is complete, we're ready to move on to configuring the environment!
|
||||
|
||||
# Next steps
|
||||
## Next steps
|
||||
|
||||
In this lab, you learned how to deploy Chef Server on Azure Stack, how to enable and use Marketplace Syndication with Azure Stack, deploying a syndicated Windows Server machine that will be used as a Workstation, and finally, deploy an additional Linux node, that will be managed by Chef. In the next lab, you'll walk through deploying the Parts Unlimited MRP app, to this node, from Chef.
|
||||
|
||||
- [Parts Unlimited MRP Continous Deployment with Chef](/deploy/azurestack/docs/chef_CD.md)
|
||||
- [Parts Unlimited MRP Continous Deployment with Chef](azurestack-42-chef-cd.html)
|
||||
|
||||
## Continuous Feedback
|
||||
### Continuous Feedback
|
||||
|
||||
#### Issues / Questions about this Hands-On-Lab?
|
||||
##### Issues / Questions about this Hands-On-Lab?
|
||||
|
||||
[If you are encountering issues or have questions during this Hands on Labs, please open an issue by clicking here](https://github.com/Microsoft/PartsUnlimitedMRP/issues)
|
|
@ -1,11 +1,15 @@
|
|||
# Continuous Deployment with Chef Server
|
||||
|
||||
---
|
||||
layout: page
|
||||
title: Continuous Deployment with Chef
|
||||
category: AzureStack
|
||||
order: 12
|
||||
---
|
||||
In this lab, you will learn how to deploy the Parts Unlimited MRP App in an automated fashion onto a Linux VM with Chef Server 12.
|
||||
After this lab, you will have a working continuous deployment environment in Chef that will deploy the Parts Unlimited MRP app to a Virtual Machine in Azure Stack.
|
||||
|
||||
## Pre-Requisites:
|
||||
### Pre-Requisites:
|
||||
|
||||
- Completion of the lab [Setup Environment | Continuous Deployment with Puppet](/deploy/azurestack/docs/chef_setup.md)
|
||||
- Completion of the lab [Setup Continuous Deployment with Chef](azurestack-41-chef-setup.html)
|
||||
|
||||
In the previous lab, we setup the environment. This involved deploying a Chef Server, syndicating and deploying a Windows Server VM, that will act as our workstation, and finally, we deployed a single Linux node which will eventually host our Parts Unlimited MRP application.
|
||||
|
||||
|
@ -17,7 +21,7 @@ To recap, here's what we'll be doing during this part of the lab:
|
|||
- Bootstrap the MRP App Server and Deploy the Application: You will bootstrap the MRP app and use the role that you previously created to deploy the app.
|
||||
- Remediating Configuration Changes: You will see how Chef reacts when changes happen to the configuration and how Chef resolves issues.
|
||||
|
||||
## Configure the Chef Workstation
|
||||
### Configure the Chef Workstation
|
||||
Earlier, you deployed a Windows Server virtual machine that will act as our administrative workstation for Chef administration. During that deployment, as the ARM template was being executed, a custom PowerShell script was being called, that performed the following task on that Windows Server virtual machine:
|
||||
|
||||
```powershell
|
||||
|
@ -43,7 +47,7 @@ This PowerShell script essentially installed a Package Manager called Chocolatey
|
|||
|
||||
Now in order to start using the Windows Server workstation, we need to connect to it via Remote Desktop Protocol, or RDP. In the Azure Stack portal, click on **Virtual Machines**, then the name of your Chef Workstation virtual machine. In the **Essentials** blade, you'll see both the IP address and the DNS name, but at the top of the blade, you'll also see a **Connect** button. **Note**, you may need to allow popups in your browser to see the RDP download prompt. It will likely be saved to your **Downloads** folder for future reference.
|
||||
|
||||
![Chef Workstation Name](/deploy/azurestack/docs/media/ChefWorkstationName.PNG)
|
||||
![Chef Workstation Name](<../assets/azurestack/ChefWorkstationName.PNG>)
|
||||
|
||||
Open the RDP file and enter the appropriate credentials. In our case, this was **localadmin** and your chosen password.
|
||||
|
||||
|
@ -51,33 +55,33 @@ Once you are successfully logged into the Chef Workstation VM, we can start the
|
|||
|
||||
1. From the desktop, open Chrome or Firefox and navigate to the Chef Manage web page. The address will be of the form chefservername.local.cloudapp.azurestack.external. Open a browser to https://dnsaddress. (Make sure you're going to http__s__, not http). You will be prompted about an invalid certificate - it is safe to ignore this for the purposes of this lab. You should see the Chef Manage login page.
|
||||
|
||||
![Chef Manage Login Page](/deploy/azurestack/docs/media/ChefManageSignIn.PNG)
|
||||
![Chef Manage Login Page](<../assets/azurestack/ChefManageSignIn.PNG>)
|
||||
|
||||
2. Sign in with your credentials that you provided when you deployed the Chef Server. If you followed the guide, you'll have used **chefadmin** and a password of your choice.
|
||||
|
||||
3. Minimize the browser, and from the desktop, launch the **Chef Development Kit**.
|
||||
4. Once opened, run `chef verify`. A list of components will be returned, however the chef verify command will return errors that git was not configured with your identity information. We'll configure that now.
|
||||
|
||||
![Chef Verify Error](/deploy/azurestack/docs/media/ChefVerify.PNG)
|
||||
![Chef Verify Error](<../assets/azurestack/ChefVerify.PNG>)
|
||||
|
||||
5. Configure your global git variables with your name and email address
|
||||
|
||||
git config --global user.name "YourName"
|
||||
git config --global user.email "you@yourdomain.com"
|
||||
|
||||
![Chef Update Git User](/deploy/azurestack/docs/media/ChefGitUser.PNG)
|
||||
![Chef Update Git User](<../assets/azurestack/ChefGitUser.PNG>)
|
||||
|
||||
Run `chef verify` again to ensure no further errors exist.
|
||||
|
||||
6. Go back to the Chef Manage website, go to the **Administration** tab, then select the **partsunlimited** organization. Click on the **Starter Kit** on the left, then **Download Starter Kit**.
|
||||
|
||||
![Chef Verify Error](/deploy/azurestack/docs/media/ChefStarterKit.PNG)
|
||||
![Chef Verify Error](<../assets/azurestack/ChefStarterKit.PNG>)
|
||||
|
||||
7. Extract the Chef starter kit files to a directory like `C:\Users\<username>\chef\`.
|
||||
7. Extract the Chef starter kit files to a directory like `C:\Users\<username>\chef-starter\`.
|
||||
|
||||
8. Open the knife.rb file in chef-repo\ .chef and check that the chef_server_url matches the external FQDN (e.g. https://<chef-server-dns-name>.local.cloudapp.azurestack.external/organizations/partsunlimited). Then, save and close the file.
|
||||
8. Open the knife.rb file in chef-repo\ .chef and check that the chef_server_url matches the external FQDN (e.g. https://chef-server-dns-name.local.cloudapp.azurestack.external/organizations/partsunlimited). Then, save and close the file.
|
||||
|
||||
![Edit Knife File](/deploy/azurestack/docs/media/ChefEditKnife.PNG)
|
||||
![Edit Knife File](<../assets/azurestack/ChefEditKnife.PNG>)
|
||||
|
||||
9. Change directories to the chef-repo directory in the Chef DK shell (i.e. `cd C:\Users\<username>\Downloads\chef-starter\chef-repo`). Run the following git commands:
|
||||
|
||||
|
@ -99,14 +103,14 @@ Once you are successfully logged into the Chef Workstation VM, we can start the
|
|||
|
||||
13. Run the `dir` command from Step 11 again, and observe that additional files and folders have been created in the chef-repo directory.
|
||||
|
||||
![Additional Chef Files](/deploy/azurestack/docs/media/ChefAddedFiles.PNG)
|
||||
![Additional Chef Files](<../assets/azurestack/ChefAddedFiles.PNG>)
|
||||
|
||||
14. Commit the added files into the git repository:
|
||||
|
||||
git add -A
|
||||
git commit -m "knife download commit"
|
||||
|
||||
## Create a Chef Cookbook
|
||||
### Create a Chef Cookbook
|
||||
In this exercise, we will create a cookbook to automate the installation of the Parts Unlimited MRP application and upload it to the Chef server.
|
||||
|
||||
1. Use the **knife tool** to generate a cookbook template.
|
||||
|
@ -117,7 +121,7 @@ In this exercise, we will create a cookbook to automate the installation of the
|
|||
|
||||
This creates an **mrpapp** directory in the **chef-repo/cookbooks/** directory that contains all of the boilerplate code that defines a cookbook and a default recipe.
|
||||
|
||||
![Chef Cookbook Directory](/deploy/azurestack/docs/media/ChefCookbookDirectory.PNG)
|
||||
![Chef Cookbook Directory](<../assets/azurestack/ChefCookbookDirectory.PNG>)
|
||||
|
||||
2. Edit the **metadata.rb** file in our cookbook directory. Open **chef-repo/cookbooks/mrpapp/metadata.rb** for edit
|
||||
|
||||
|
@ -127,7 +131,7 @@ In this exercise, we will create a cookbook to automate the installation of the
|
|||
|
||||
depends 'apt'
|
||||
|
||||
![Chef Metadata.rb File](/deploy/azurestack/docs/media/ChefMetadata.PNG)
|
||||
![Chef Metadata.rb File](<../assets/azurestack/ChefMetadata.PNG>)
|
||||
|
||||
Save and close the file.
|
||||
|
||||
|
@ -166,7 +170,7 @@ In this exercise, we will create a cookbook to automate the installation of the
|
|||
|
||||
7. Paste the contents of the recipe into the default recipe file, then save and close the file.
|
||||
|
||||
![Chef Default Recipe](/deploy/azurestack/docs/media/ChefDefaultRecipe.PNG)
|
||||
![Chef Default Recipe](<../assets/azurestack/ChefDefaultRecipe.PNG>)
|
||||
|
||||
8. **The following explains what the recipe is doing to provision the application.**
|
||||
|
||||
|
@ -317,18 +321,18 @@ In this exercise, we will create a cookbook to automate the installation of the
|
|||
|
||||
Now that we have a recipe created and all of the dependencies installed, we can upload our cookbooks and recipes to the Chef server with the knife upload command.
|
||||
|
||||
## Create a Role
|
||||
### Create a Role
|
||||
In this exercise, you will use the Chef Manage web site to create a role to define a baseline set of cookbooks and attributes that can be applied to multiple servers.
|
||||
|
||||
At the start of this task, you should be logged in to the Chef Manage web site.
|
||||
|
||||
1. Click on the "Policy" tab. Then, click on the "Roles" tab and then "Create."
|
||||
|
||||
![Create a Role](https://github.com/Microsoft/PartsUnlimitedMRP/blob/master/docs/HOL_Deploying-Using-Chef/media/policy_tab.png)
|
||||
![Create a Role](<../assets/chef/policy_tab.png>)
|
||||
|
||||
2. Enter the role name *mrp* then the "Next" button.
|
||||
|
||||
![Enter a role name](https://github.com/Microsoft/PartsUnlimitedMRP/blob/master/docs/HOL_Deploying-Using-Chef/media/enter_role_name.png)
|
||||
![Enter a role name](<../assets/chef/enter_role_name.png>)
|
||||
|
||||
3. Under **Available Recipes**, find the *mrpapp* recipe.
|
||||
|
||||
|
@ -336,11 +340,11 @@ At the start of this task, you should be logged in to the Chef Manage web site.
|
|||
|
||||
Drag the *mrpapp* recipe to the **Current Run List** box.
|
||||
|
||||
![Define the Run List](https://github.com/Microsoft/PartsUnlimitedMRP/blob/master/docs/HOL_Deploying-Using-Chef/media/add_mrp_run_list.png)
|
||||
![Define the Run List](<../assets/chef/add_mrp_run_list.png>)
|
||||
|
||||
4. Repeat for the **chef-client::service** recipe.
|
||||
|
||||
![Chef Client Service](https://github.com/Microsoft/PartsUnlimitedMRP/blob/master/docs/HOL_Deploying-Using-Chef/media/add_chefclient_run_list.png)
|
||||
![Chef Client Service](<../assets/chef/add_chefclient_run_list.png>)
|
||||
|
||||
The run list should be:
|
||||
|
||||
|
@ -357,7 +361,7 @@ At the start of this task, you should be logged in to the Chef Manage web site.
|
|||
}
|
||||
}
|
||||
|
||||
![Default Attributes](https://github.com/Microsoft/PartsUnlimitedMRP/blob/master/docs/HOL_Deploying-Using-Chef/media/add_default_attributes.png)
|
||||
![Default Attributes](<../assets/chef/add_default_attributes.png>)
|
||||
|
||||
In the previous exercise, we referenced an attribute called `['tomcat']['mrp_port']` in our recipe. This was referencing a JSON object. Now we can define default values to provide.
|
||||
|
||||
|
@ -372,20 +376,20 @@ At the start of this task, you should be logged in to the Chef Manage web site.
|
|||
}
|
||||
}
|
||||
|
||||
![Override Attributes](https://github.com/Microsoft/PartsUnlimitedMRP/blob/master/docs/HOL_Deploying-Using-Chef/media/add_override_attributes.png)
|
||||
![Override Attributes](<../assets/chef/add_override_attributes.png>)
|
||||
|
||||
The second recipe we added to the run list was chef-client:: service. This recipe ensure that the Chef client will run on a regular basis to ensure that the environment is in sync with what is defined in our recipe. However, the default value for the chef client service is to sync every 30 minutes. We can override that value here and set it to a more frequent interval.
|
||||
|
||||
Then, click **Create Role**.
|
||||
|
||||
## Bootstrap the MRP App Server and Deploy the Application
|
||||
### Bootstrap the MRP App Server and Deploy the Application
|
||||
In this exercise, you will run the knife command to bootstrap the Parts Unlimited MRP app server and assign the MRP application role.
|
||||
|
||||
1. Use knife to boostrap the VM. If you have followed the steps in the guide, your FQDN should be **chefnode1.local.cloudapp.azurestack.external**, your username for the additional node should be **localadmin** and you used a password of your choice.
|
||||
|
||||
knife bootstrap <FQDN-for-MRP-App-VM> --ssh-user <mrp-app-admin-username> --ssh-password <mrp-app-admin-password> --node-name mrp-app --run-list role[mrp] --sudo --verbose
|
||||
|
||||
![Knife Bootstrap the Additional Node](/deploy/azurestack/docs/media/ChefKnifeBootstrap.PNG)
|
||||
![Knife Bootstrap the Additional Node](<../assets/azurestack/ChefKnifeBootstrap.PNG>)
|
||||
|
||||
The script will take a few minutes to run. You will see it do the following things:
|
||||
- Install Chef on the VM
|
||||
|
@ -395,23 +399,23 @@ In this exercise, you will run the knife command to bootstrap the Parts Unlimite
|
|||
|
||||
2. Open the URL you chose for your public DNS name in a browser. The URL should be something like `http://<mrp-dns-name>.local.cloudapp.azurestack.external:9080/mrp.`. If you followed the guide specifically, your DNS name should be http://chefnode1.local.cloudapp.azurestack.external:9080/mrp
|
||||
|
||||
![MRP App Deployed](/deploy/azurestack/docs/media/ChefMRPDeployed.PNG)
|
||||
![MRP App Deployed](<../assets/azurestack/ChefMRPDeployed.PNG>)
|
||||
|
||||
3. Click around the site and observe that it functions normally.
|
||||
|
||||
## Remediating Configuration Changes
|
||||
### Remediating Configuration Changes
|
||||
|
||||
In this exercise, you will make a change to the configuration of your MRP application server, then observe as Chef automatically corrects the issue.
|
||||
|
||||
1. Click on the **Start button** and search for Putty. CLick on PuTTY.exe (which has already been installed on the Chef workstation) and enter the host name of the MRP application server, which if you've followed the guide, should be **chefnode1.local.cloudapp.azurestack.external**. Then click **Open**.
|
||||
|
||||
![Putty Login](/deploy/azurestack/docs/media/ChefPutty.PNG)
|
||||
![Putty Login](<../assets/azurestack/ChefPutty.PNG>)
|
||||
|
||||
Click Yes to cache the server host key.
|
||||
|
||||
2. When prompted for a user name, enter the MRP admin username, which should be **localadmin** and press **Enter**.
|
||||
|
||||
![Putty Login](/deploy/azurestack/docs/media/ChefPuttyMRP.PNG)
|
||||
![Putty Login](<../assets/azurestack/ChefPuttyMRP.PNG>)
|
||||
|
||||
When prompted for a password, enter the MRP admin password and press **Enter**.
|
||||
|
||||
|
@ -427,29 +431,27 @@ In this exercise, you will make a change to the configuration of your MRP applic
|
|||
|
||||
Click **Run History**.
|
||||
|
||||
Observe that the node has a first successful run that executed 25/51 resources, and possibly additional runs that executed 0/35 resources. This is because the chef client installed on the server runs every 60 seconds and checks for environmental discrepancies.
|
||||
Observe that the node has a first successful run that executed 26/55 resources, and possibly additional runs that executed 0/39 resources. This is because the chef client installed on the server runs every 60 seconds and checks for environmental discrepancies.
|
||||
|
||||
![Chef Reports Tab](https://github.com/Microsoft/PartsUnlimitedMRP/blob/master/docs/HOL_Deploying-Using-Chef/media/reports_tab.png)
|
||||
![Chef Reports Tab](<../assets/chef/reports_tab.png>)
|
||||
|
||||
6. Click on the run that shows 1/35 resources executed. In the Details tab, it shows that the action executed was starting tomcat7.
|
||||
6. Click on the run that shows 1/39 resources executed. In the Details tab, it shows that the action executed was starting tomcat7.
|
||||
|
||||
![Chef Report Details](https://github.com/Microsoft/PartsUnlimitedMRP/blob/master/docs/HOL_Deploying-Using-Chef/media/report_details_tab.png)
|
||||
![Chef Report Details](<../assets/chef/report_details_tab.png>)
|
||||
|
||||
7. Reload the MRP application site, and you should see the site successfully load.
|
||||
|
||||
# Next steps
|
||||
## Next steps
|
||||
|
||||
In this hands-on lab you explored some of the new features and capabilities of deploying the MRP App via Chef Server in Azure Stack. You also learned about Marketplace Syndication between Azure and Azure Stack. This hands-on lab was designed to point out new features, discuss and describe them, and enable you to understand these features as part of the DevOps Lifecycle.
|
||||
|
||||
If you're interested in learning more about DevOps tooling on Azure Stack, check out these Hands-On-Labs:
|
||||
|
||||
- [Continuous Deployment with Jenkins](/deploy/azurestack/docs/jenkins_setup.md)
|
||||
- [Continuous Deployment with Puppet](/deploy/azurestack/docs/puppet_setup.md)
|
||||
- [Continuous Deployment with Jenkins](azurestack-36-jenkins-setup.html)
|
||||
- [Continuous Deployment with Puppet](azurestack-39-puppet-setup.html)
|
||||
|
||||
# Continuous Feedback
|
||||
### Continuous Feedback
|
||||
|
||||
#### Issues / Questions about this Hands-On-Lab ??
|
||||
##### Issues / Questions about this Hands-On-Lab ??
|
||||
|
||||
[If you are encountering issues or have questions during this Hands on Labs, please open an issue by clicking here](https://github.com/Microsoft/PartsUnlimitedMRP/issues)
|
||||
|
||||
Thanks
|
До Ширина: | Высота: | Размер: 48 KiB После Ширина: | Высота: | Размер: 48 KiB |
До Ширина: | Высота: | Размер: 15 KiB После Ширина: | Высота: | Размер: 15 KiB |
До Ширина: | Высота: | Размер: 74 KiB После Ширина: | Высота: | Размер: 74 KiB |
До Ширина: | Высота: | Размер: 31 KiB После Ширина: | Высота: | Размер: 31 KiB |
До Ширина: | Высота: | Размер: 37 KiB После Ширина: | Высота: | Размер: 37 KiB |
До Ширина: | Высота: | Размер: 18 KiB После Ширина: | Высота: | Размер: 18 KiB |
До Ширина: | Высота: | Размер: 36 KiB После Ширина: | Высота: | Размер: 36 KiB |
До Ширина: | Высота: | Размер: 28 KiB После Ширина: | Высота: | Размер: 28 KiB |
До Ширина: | Высота: | Размер: 23 KiB После Ширина: | Высота: | Размер: 23 KiB |
До Ширина: | Высота: | Размер: 64 KiB После Ширина: | Высота: | Размер: 64 KiB |
До Ширина: | Высота: | Размер: 59 KiB После Ширина: | Высота: | Размер: 59 KiB |
До Ширина: | Высота: | Размер: 83 KiB После Ширина: | Высота: | Размер: 83 KiB |
До Ширина: | Высота: | Размер: 31 KiB После Ширина: | Высота: | Размер: 31 KiB |
До Ширина: | Высота: | Размер: 19 KiB После Ширина: | Высота: | Размер: 19 KiB |
До Ширина: | Высота: | Размер: 116 KiB После Ширина: | Высота: | Размер: 116 KiB |
До Ширина: | Высота: | Размер: 72 KiB После Ширина: | Высота: | Размер: 72 KiB |
До Ширина: | Высота: | Размер: 148 KiB После Ширина: | Высота: | Размер: 148 KiB |
До Ширина: | Высота: | Размер: 31 KiB После Ширина: | Высота: | Размер: 31 KiB |
До Ширина: | Высота: | Размер: 19 KiB После Ширина: | Высота: | Размер: 19 KiB |
До Ширина: | Высота: | Размер: 20 KiB После Ширина: | Высота: | Размер: 20 KiB |
До Ширина: | Высота: | Размер: 4.1 KiB После Ширина: | Высота: | Размер: 4.1 KiB |
До Ширина: | Высота: | Размер: 12 KiB После Ширина: | Высота: | Размер: 12 KiB |
До Ширина: | Высота: | Размер: 13 KiB После Ширина: | Высота: | Размер: 13 KiB |
До Ширина: | Высота: | Размер: 45 KiB После Ширина: | Высота: | Размер: 45 KiB |
До Ширина: | Высота: | Размер: 24 KiB После Ширина: | Высота: | Размер: 24 KiB |
До Ширина: | Высота: | Размер: 46 KiB После Ширина: | Высота: | Размер: 46 KiB |
До Ширина: | Высота: | Размер: 5.7 KiB После Ширина: | Высота: | Размер: 5.7 KiB |
До Ширина: | Высота: | Размер: 5.8 KiB После Ширина: | Высота: | Размер: 5.8 KiB |
До Ширина: | Высота: | Размер: 22 KiB После Ширина: | Высота: | Размер: 22 KiB |
До Ширина: | Высота: | Размер: 44 KiB После Ширина: | Высота: | Размер: 44 KiB |
До Ширина: | Высота: | Размер: 5.2 KiB После Ширина: | Высота: | Размер: 5.2 KiB |
До Ширина: | Высота: | Размер: 58 KiB После Ширина: | Высота: | Размер: 58 KiB |
До Ширина: | Высота: | Размер: 44 KiB После Ширина: | Высота: | Размер: 44 KiB |
До Ширина: | Высота: | Размер: 49 KiB После Ширина: | Высота: | Размер: 49 KiB |
До Ширина: | Высота: | Размер: 18 KiB После Ширина: | Высота: | Размер: 18 KiB |
До Ширина: | Высота: | Размер: 1.1 KiB После Ширина: | Высота: | Размер: 1.1 KiB |
До Ширина: | Высота: | Размер: 7.8 KiB После Ширина: | Высота: | Размер: 7.8 KiB |
До Ширина: | Высота: | Размер: 43 KiB После Ширина: | Высота: | Размер: 43 KiB |
До Ширина: | Высота: | Размер: 20 KiB После Ширина: | Высота: | Размер: 20 KiB |
До Ширина: | Высота: | Размер: 8.7 KiB После Ширина: | Высота: | Размер: 8.7 KiB |
До Ширина: | Высота: | Размер: 132 KiB После Ширина: | Высота: | Размер: 132 KiB |
До Ширина: | Высота: | Размер: 78 KiB После Ширина: | Высота: | Размер: 78 KiB |
До Ширина: | Высота: | Размер: 38 KiB После Ширина: | Высота: | Размер: 38 KiB |
До Ширина: | Высота: | Размер: 15 KiB После Ширина: | Высота: | Размер: 15 KiB |
До Ширина: | Высота: | Размер: 45 KiB После Ширина: | Высота: | Размер: 45 KiB |
До Ширина: | Высота: | Размер: 31 KiB После Ширина: | Высота: | Размер: 31 KiB |
До Ширина: | Высота: | Размер: 8.8 KiB После Ширина: | Высота: | Размер: 8.8 KiB |
До Ширина: | Высота: | Размер: 51 KiB После Ширина: | Высота: | Размер: 51 KiB |
До Ширина: | Высота: | Размер: 65 KiB После Ширина: | Высота: | Размер: 65 KiB |
До Ширина: | Высота: | Размер: 47 KiB После Ширина: | Высота: | Размер: 47 KiB |
До Ширина: | Высота: | Размер: 99 KiB После Ширина: | Высота: | Размер: 99 KiB |
До Ширина: | Высота: | Размер: 27 KiB После Ширина: | Высота: | Размер: 27 KiB |
До Ширина: | Высота: | Размер: 40 KiB После Ширина: | Высота: | Размер: 40 KiB |
До Ширина: | Высота: | Размер: 13 KiB После Ширина: | Высота: | Размер: 13 KiB |
До Ширина: | Высота: | Размер: 18 KiB После Ширина: | Высота: | Размер: 18 KiB |
До Ширина: | Высота: | Размер: 14 KiB После Ширина: | Высота: | Размер: 14 KiB |
До Ширина: | Высота: | Размер: 7.5 KiB После Ширина: | Высота: | Размер: 7.5 KiB |
До Ширина: | Высота: | Размер: 4.7 KiB После Ширина: | Высота: | Размер: 4.7 KiB |
До Ширина: | Высота: | Размер: 10 KiB После Ширина: | Высота: | Размер: 10 KiB |
До Ширина: | Высота: | Размер: 52 KiB После Ширина: | Высота: | Размер: 52 KiB |
До Ширина: | Высота: | Размер: 66 KiB После Ширина: | Высота: | Размер: 66 KiB |
До Ширина: | Высота: | Размер: 45 KiB После Ширина: | Высота: | Размер: 45 KiB |
|
@ -24,7 +24,14 @@ You may watch a [demo in Channel 9](https://channel9.msdn.com/Blogs/TalkDevOps/T
|
|||
- Continuous Integration - C.I
|
||||
- Continuous Deployment - C.D
|
||||
- Infrastructure as Code - IaC
|
||||
- Configuration Management - ConfMgnt
|
||||
- Configuration Management - ConfMgmt
|
||||
|
||||
## Fundamentals on Azure Stack
|
||||
Microsoft Azure Stack is a new hybrid cloud platform product that enables you to deliver Azure services from your own datacenter. Just like for the Parts Unlimited MRP on Azure documentation, this detailed series of documents will walk you through various deployments and configurations, along with usage of a number of core DevOps tools on Azure Stack, including:
|
||||
- Adding custom images and marketplace items to Azure Stack
|
||||
- Continuous Integration and Deployment with Jenkins on Azure Stack
|
||||
- Continuous Deployment & Configuration Management with Puppet on Azure Stack
|
||||
- Continuous Deployment & Cnfiguration Management with Chef on Azure Stack
|
||||
|
||||
## Advanced
|
||||
- Microservices using Azure Container Service or Docker Swarm
|
||||
|
|