Chuyển đến nội dung chính

Bài đăng

Hiển thị các bài đăng có nhãn Devops

Azure Pipeline: Build & Push Docker Image lên Docker Hub - Day 3

Đây là bài mình vừa học vừa ghi lại trong quá trình thực hành DevOps — từ việc cài Docker Desktop, tạo Dockerfile cho ứng dụng C#, đến việc tự động build và push image lên Docker Hub bằng Azure Pipelines. Mục tiêu là tự hiểu – tự làm – tự note, để khi quay lại sau này có thể triển khai lại toàn bộ mà không cần tìm lại tài liệu. Giới thiệu  Trong DevOps, Docker Image là “bản đóng gói” (package) toàn bộ ứng dụng, môi trường và dependency. Khi bạn build một image, bạn đang tạo ra một “snapshot” mà có thể chạy ở bất kỳ môi trường nào — từ máy local đến cloud. Quy trình chuẩn để đưa image lên cloud registry gồm 3 bước: Build image – dùng Dockerfile. Tag image – đặt tên định danh (vd: username/app:latest). Push image – đẩy lên Docker Hub (hoặc ACR, ECR...). Với Azure Pipelines, ta có thể tự động hoá toàn bộ quy trình đó bằng một YAML pipeline. Chuẩn bị Self-hosted agent: Xem lại Day 2 Docker Desktop for Windows Kiểm tra lại Docker: docker version docker info Nếu có thông tin client/ser...

Azure Pipeline: Setup Azure Pipelines Self-hosted Agent - Day 2

Khi học và thực hành Azure DevOps với free tier, có thể bạn sẽ gặp lỗi quen thuộc: “No hosted parallelism has been purchased or granted” Lỗi này nghĩa là bạn không có quyền dùng cloud agent miễn phí, nên pipeline không thể chạy được. Về lý thuyết, bạn có thể gửi đơn xin Microsoft cấp quyền miễn phí — nhưng quá trình này mất thời gian và không đảm bảo được duyệt ngay. Vì thế, cách đơn giản và chủ động nhất là tự tạo agent của riêng mình trên máy cá nhân. Không chỉ giúp bạn fix được error này, mà bạn còn có nhiều cơ hội: Tùy chỉnh môi trường build theo ý muốn Học sâu hơn về cách hoạt động của CI/CD Tiết kiệm thời gian khi thử nghiệm và học DevOps Trong bài này, mình sẽ hướng dẫn bạn chi tiết cách thiết lập CI trên máy cá nhân (self-hosted agent), cấu hình pipeline YAML, và chạy script bằng Bash — từ A đến Z. Tạo Personal Access Token (PAT) Trước khi cấu hình agent, bạn cần có PAT – Personal Access Token để Azure DevOps xác nhận quyền truy cập của bạn. PAT đóng vai trò như “chìa khóa” giú...

Azure Pipeline: Tìm hiểu về Azure Pipeline - Day 1

Azure Pipeline là gì?  Azure Pipeline là một công cụ CI/CD (Continuous Integration / Continuous Delivery), cho phép chúng ta tự động build, chạy test và triển khai (deploy) phần mềm chỉ với vài bước cấu hình đơn giản. Azure Pipeline miễn phí hoàn toàn cho các dự án công khai (public projects) và cung cấp 30 giờ miễn phí mỗi tháng cho các dự án riêng tư (private projects). Những điểm mạnh của Azure Pipeline ✅ Hỗ trợ đa ngôn ngữ và nền tảng: Làm việc tốt với hầu hết các ngôn ngữ phổ biến như Java, JavaScript, Node.js, Python, .NET, C++, Go, PHP,… và hoạt động trên Windows, Linux hoặc macOS. 🚀 Triển khai linh hoạt: Có thể deploy cùng lúc lên nhiều môi trường khác nhau như máy ảo (Virtual Machines), container, hệ thống on-premises, hoặc nền tảng đám mây (Cloud Platforms). ☁️ Tích hợp mạnh mẽ với Azure Cloud: Dễ dàng cấu hình, theo dõi và triển khai ứng dụng trực tiếp lên Azure, giúp rút ngắn đáng kể thời gian phát hành sản phẩm. 🔗 Kết nối đa dạng với hệ thống quản lý mã nguồn: Hỗ trợ...

Terraform: Tách File - Part 6

Sau khi hoàn tất Part 5, chúng ta đã có một file main.tf “all-in-one” giúp deploy web ASP.NET Core và SQL Server lên Azure Container Instance (ACI). Ở Part 6, chúng ta sẽ refactor lại project để chuẩn hóa theo mô hình DevOps production-ready: Tách file Terraform thành nhiều phần dễ bảo trì (versions.tf, provider.tf, variables.tf, outputs.tf...) Thêm remote backend lưu state trong Azure Storage Chuẩn hóa biến (variables.tf) và đầu ra (outputs.tf) Hỗ trợ nhiều môi trường (dev, staging, production) bằng .tfvars + workspace  Cấu trúc thư mục tf-aci-fullstack/ ├─ versions.tf # Định nghĩa version Terraform & provider ├─ provider.tf # Cấu hình provider (azurerm, kubernetes nếu cần) ├─ backend.tf # Remote state (Azure Storage) ├─ variables.tf # Input variables ├─ locals.tf # Đặt quy ước prefix, tags, định danh ├─ main.tf # Resource chính (ACI, ACR, VNet,...) ├─ outputs.tf # Output URL, login server,... ├─ dev.tfvars ...

Terraform: Nâng cấp ASP.Core với SQL Server - Part 5

Trong bài viết này, chúng ta sẽ tạo Docker Image cho SQL Server, tích hợp thư viện AspNetCore.HealthChecks.SqlServer vào ứng dụng ASP.NET Core, sau đó dùng Terraform để triển khai cả hai container (ASP.NET Core và SQL Server) cùng lúc lên Azure Container Instances (ACI). Cấu trúc dự án Chúng ta cần một folder riêng cho Dockerfile của SQL Server để tránh nhầm lẫn và một folder mới cho Terraform. tf-aci-fullstack/ ├── main.tf ├── variables.tf └── outputs.tf sql-db-image/ └── Dockerfile AspNetCoreGettingStarted/ ├── *.* ├── Dockerfile └── appsettings.json SQL Server Chúng ta sẽ sử dụng image chính thức của Microsoft. # Use the official Microsoft SQL Server image for Linux FROM mcr.microsoft.com/mssql/server:2019-latest # Set environment variables for SQL Server configuration ENV ACCEPT_EULA=Y ENV SA_PASSWORD=YourStrongPassword123! ENV MSSQL_PID=Developer # Expose the default SQL Server port EXPOSE 1433 ASP.NET Core Tạo ứng dụng ASP.NET Core. Thêm Health Check vào project ASP.NET C...

Terraform: Hướng dẫn triển khai ASP.NET Core lên Azure bằng Docker + Terraform - Part 4

Trong bài này, chúng ta sẽ cùng đi qua toàn bộ quy trình DevOps cơ bản cho một ứng dụng ASP.NET Core, bao gồm: Tạo project ASP.NET Core Viết file Dockerfile, build và run image ở local Push image lên Docker Hub Tạo các file Terraform (variables.tf, main.tf, outputs.tf) để triển khai container lên Azure Container Instance Tạo project ASP.NET Core Mở terminal và chạy dotnet new webapp -o AspNetCoreGettingStarted cd AspNetCoreGettingStarted dotnet run Ở bước này, bạn chú ý trong folder bin, sẽ có dll là AspNetCoreGettingStarted.dll. Ở bước tạo Dockerfile, chúng ta sẽ sử dụng EntryPoint trỏ tới dll này Tạo file Dockerfile Trong thư mục project, tạo file Dockerfile. Ở đây mình sử dụng Alpine Linux – phiên bản nhẹ, tối ưu cho container. # syntax=docker/dockerfile:1 # Stage 1: Build application FROM mcr.microsoft.com/dotnet/sdk:9.0-alpine AS build-env WORKDIR /app # Copy csproj and restore as distinct layers COPY *.csproj ./ RUN dotnet restore # Copy everything else and build COPY . ./ R...

Terraform: Dùng Terraform gọi PowerShell để chạy Docker Compose - Part 3

Thông thường Terraform dùng để quản lý hạ tầng (Infrastructure as Code) — ví dụ tạo VM, network, AKS, EKS,... Nhưng đôi khi ta cần chạy thêm các lệnh cục bộ (local), chẳng hạn: Tự động chạy Docker Compose khi hạ tầng đã sẵn sàng. Dừng các container (docker compose down) khi ta terraform destroy. Gọi script PowerShell hay bash sau khi apply xong. → Khi đó, ta dùng null_resource + local-exec provisioner của Terraform. Cấu trúc file ví dụ project-root/ ├── backend/ │ └── program.cs │ └── *.* ├── frontend/ │ ├── app.js │ └── *.* └── main.tf └── compose.yaml └── *.* Trong đó:  main.tf: chứa logic Terraform compose.yaml: mô tả Docker services File main.tf terraform { required_version = ">= 1.4.0" required_providers { null = { source = "hashicorp/null" version = "~> 3.0" } } } resource "null_resource" "run_compose" { # triggers: đảm bảo Terraform biết khi nào cần re-run triggers = { compos...

Terraform: "Hello Terraform!" đầu tiên trên VS Code - Part 2

Terraform là công cụ Infrastructure as Code (IaC) giúp bạn quản lý hạ tầng (server, container, cloud...) bằng code. Chúng ta sẽ đi qua các phần Cài extension HashiCorp Terraform cho VS Code Hiểu cú pháp cơ bản trong Terraform (HCL – HashiCorp Configuration Language) Hiểu về null provider và null_resource.  Viết và chạy ví dụ đầu tiên — "Hello Terraform!" Thực thi các command Terraform quan trọng. Cài đặt Extension Terraform trong VS Code Trong Visual Studio Code, bạn nhấn Ctrl + Shift + X để mở Extensions, tìm "HashiCorp Terraform" Sau khi cài xong, VS Code sẽ hỗ trợ: Tô màu cú pháp (syntax highlighting) Tự động gợi ý (intellisense) Kiểm tra lỗi cú pháp .tf Format code bằng lệnh Shift + Alt + F  Cú pháp Terraform (HCL) Terraform dùng ngôn ngữ HCL – HashiCorp Configuration Language, có 3 thành phần chính: Blocks: là một đơn vị cấu hình cơ bản, được viết bằng Ngôn ngữ Cấu hình HashiCorp (HCL), dùng để xác định và quản lý các khía cạnh khác nhau của cơ sở hạ tầng. Các ...

Terraform: Terraform là gì? - Part 1

Terraform là gì? Terraform là một công cụ nguồn mở, được phát triển bởi HashiCorp, dùng để quản lý cơ sở hạ tầng dưới dạng mã (IaC - Infrastructure as Code). Công cụ này cho phép người dùng định nghĩa, xây dựng, thay đổi và quản lý các tài nguyên như máy chủ, mạng và cơ sở dữ liệu một cách tự động bằng cách viết các tệp cấu hình. Terraform giúp tự động hóa việc cung cấp và cập nhật cơ sở hạ tầng, kể cả trên nhiều nhà cung cấp đám mây khác nhau.  Hiểu đơn giản Thay vì bạn phải: Vào Azure Portal → click tạo VM, network, resource group… ➡️ Với Terraform, bạn viết file .tf (Terraform file) để mô tả mọi thứ. Cài đặt Terraform hỗ trợ nhiều hệ điều hành khác nhau như Windows, Linux, MacOS, Solaris, FreeBSD và OpenBSD... Bài viết này sẽ hướng dẫn các bạn cài trên hệ điều hành Windows Download: https://developer.hashicorp.com/terraform/install Phần tải Terraform cho Windows, với hai tùy chọn: 386 → dành cho máy 32-bit AMD64 → dành cho máy 64-bit (các CPU hiện đại: Intel, AMD, Ryzen, v.v.)...