Узнайте, как развернуть сервер Jenkins с помощью Azure Bicep.
В этой статье показано, как развернуть Jenkins с помощью Infrastructure-As-Code с Azure Bicep, доменным языком (DSL) для декларативного развертывания ресурсов Azure.
Jenkins — это сервер автоматизации с открытым исходным кодом, который помогает автоматизировать сборку, тестирование и развертывание любого проекта на нескольких платформах.
Jenkins помогает избежать критических изменений, чтобы вы могли сэкономить время и обеспечить поставку высококачественного программного обеспечения. Его веб-интерфейс позволяет легко управлять приложениями и тестировать их перед запуском в производство.
Этот шаблон Bicep включает в себя последние версии рекомендуемых сообществом плагинов, включая конвейеры и интеграцию с Git.
Предпосылки
Для развертывания решения вам потребуется следующее:
- Активная учетная запись Azure: вы можете создать учетную запись бесплатно.
- Azure Bicep установлен на вашей локальной машине.
- Азур PowerShell. См.: Установка Azure PowerShell.
- Группа ресурсов в вашей подписке Azure.
Давайте начнем!
- Примечание. Перед развертыванием этого решения мы должны принять юридические условия образа виртуальной машины. Чтобы прочитать и принять юридические условия, вы можете использовать PowerShell для принятия условий с помощью приведенного ниже командлета:
Get-AzMarketplaceTerms ` -Publisher 'bitnami' ` -Product 'jenkins' ` -Name '1-650' | Set-AzMarketplaceTerms -Accept
Обзор решения
Мы создадим шаблон Bicep, который создает сервер Jenkin.
Решение будет включать следующие файлы:
- main.bicep: это шаблон бицепса.
- azuredeploy.parameters.json: эти файлы параметров содержат значения, используемые для развертывания шаблона Bicep.
Этот шаблон предоставляет учетную запись хранения, виртуальную сеть, группы доступности, общедоступный IP-адрес и сетевой интерфейс, необходимые для установки.
Теперь давайте поработаем над нашим шаблоном бицепса.
1. Шаблон Azure Bicep — параметры
Создайте новый файл в своем рабочем каталоге и назовите его «main.bicep». Определим следующие параметры:
param location string param networkInterfaceName string param networkSecurityGroupName string param networkSecurityGroupRules array param subnetName string param virtualNetworkName string param addressPrefixes array param subnets array param publicIpAddressName string param publicIpAddressType string param publicIpAddressSku string param virtualMachineName string param virtualMachineComputerName string param osDiskType string param virtualMachineSize string param adminUsername string @secure() param adminPassword string
2. Шаблон Azure Bicep — переменные
Мы определим следующие переменные:
var nsgId = resourceId(resourceGroup().name, 'Microsoft.Network/networkSecurityGroups', networkSecurityGroupName) var vnetId = resourceId(resourceGroup().name, 'Microsoft.Network/virtualNetworks', virtualNetworkName) var subnetRef = '${vnetId}/subnets/${subnetName}'
3. Шаблон Azure Bicep — ресурсы
Мы определим следующие ресурсы:
resource networkInterfaceName_resource 'Microsoft.Network/networkInterfaces@2021-03-01' = { name: networkInterfaceName location: location properties: { ipConfigurations: [ { name: 'ipconfig1' properties: { subnet: { id: subnetRef } privateIPAllocationMethod: 'Dynamic' publicIPAddress: { id: pip.id } } } ] networkSecurityGroup: { id: nsgId } } dependsOn: [ networkSecurityGroupName_resource virtualNetworkName_resource pip ] } resource networkSecurityGroupName_resource 'Microsoft.Network/networkSecurityGroups@2019-02-01' = { name: networkSecurityGroupName location: location properties: { securityRules: networkSecurityGroupRules } } resource virtualNetworkName_resource 'Microsoft.Network/virtualNetworks@2020-11-01' = { name: virtualNetworkName location: location properties: { addressSpace: { addressPrefixes: addressPrefixes } subnets: subnets } } resource pip 'Microsoft.Network/publicIpAddresses@2019-02-01' = { name: publicIpAddressName location: location properties: { publicIPAllocationMethod: publicIpAddressType } sku: { name: publicIpAddressSku } } resource virtualMachineName_resource 'Microsoft.Compute/virtualMachines@2021-03-01' = { name: virtualMachineName location: location properties: { hardwareProfile: { vmSize: virtualMachineSize } storageProfile: { osDisk: { createOption: 'FromImage' managedDisk: { storageAccountType: osDiskType } } imageReference: { publisher: 'bitnami' offer: 'jenkins' sku: '1-650' version: 'latest' } } networkProfile: { networkInterfaces: [ { id: networkInterfaceName_resource.id } ] } osProfile: { computerName: virtualMachineComputerName adminUsername: adminUsername adminPassword: adminPassword linuxConfiguration: { patchSettings: { patchMode: 'ImageDefault' } } } diagnosticsProfile: { bootDiagnostics: { enabled: true } } } plan: { name: '1-650' publisher: 'bitnami' product: 'jenkins' } }
4. Файл параметров
Создайте новый файл с именем «azuredeploy.parameters.json». Код ниже показывает определение файла параметров:
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "value": "eastus" }, "networkInterfaceName": { "value": "jenkinsvm109" }, "networkSecurityGroupName": { "value": "jenkinsvm-nsg" }, "networkSecurityGroupRules": { "value": [ { "name": "HTTP", "properties": { "priority": 1010, "protocol": "TCP", "access": "Allow", "direction": "Inbound", "sourceApplicationSecurityGroups": [], "destinationApplicationSecurityGroups": [], "sourceAddressPrefix": "*", "sourcePortRange": "*", "destinationAddressPrefix": "*", "destinationPortRange": "80" } }, { "name": "HTTPS", "properties": { "priority": 1020, "protocol": "TCP", "access": "Allow", "direction": "Inbound", "sourceApplicationSecurityGroups": [], "destinationApplicationSecurityGroups": [], "sourceAddressPrefix": "*", "sourcePortRange": "*", "destinationAddressPrefix": "*", "destinationPortRange": "443" } }, { "name": "SSH", "properties": { "priority": 1030, "protocol": "TCP", "access": "Allow", "direction": "Inbound", "sourceApplicationSecurityGroups": [], "destinationApplicationSecurityGroups": [], "sourceAddressPrefix": "*", "sourcePortRange": "*", "destinationAddressPrefix": "*", "destinationPortRange": "22" } } ] }, "subnetName": { "value": "default" }, "virtualNetworkName": { "value": "YOUR-VNET-NAME" }, "addressPrefixes": { "value": [ "10.0.0.0/16" ] }, "subnets": { "value": [ { "name": "default", "properties": { "addressPrefix": "10.0.0.0/24" } } ] }, "publicIpAddressName": { "value": "PUBLIC-IP-NAME" }, "publicIpAddressType": { "value": "Dynamic" }, "publicIpAddressSku": { "value": "Basic" }, "virtualMachineName": { "value": "VM-NAME" }, "virtualMachineComputerName": { "value": "YOUR-VM-COMPUTER-NAME" }, "osDiskType": { "value": "Premium_LRS" }, "virtualMachineSize": { "value": "Standard_D2as_v4" }, "adminUsername": { "value": "YOUR-ADMIN-USERNAME" }, "adminPassword": { "value": "YOUR-PASSWORD" } } }
5. Шаблон Azure Bicep — развертывание
Мы будем использовать приведенную ниже команду для развертывания нашего шаблона Bicep:
$date = Get-Date -Format "MM-dd-yyyy" $deploymentName = "AzInsiderDeployment"+"$date" New-AzResourceGroupDeployment -Name $deploymentName -ResourceGroupName azinsider_demo -TemplateFile .\main.bicep -TemplateParameterFile .\azuredeploy.parameters.json -c
На изображении ниже показан предварительный просмотр развертывания:
Затем мы выполним развертывание. На изображении ниже показан результат развертывания:
Теперь давайте проверим статус Дженкинса. Вы можете использовать общедоступный IP-адрес виртуальной машины и получить доступ к Jenkins через браузер, используя порт 443:
Полный код этого решения можно найти здесь:
👉 Присоединяйтесь к списку рассылки AzInsider здесь.
-Дэйв Р.