Latihan - Membuat agen build yang berjalan di Azure

Selesai

Di unit ini, untuk mengonfigurasi agen build yang dapat Anda gunakan di Microsoft Azure Pipelines, Anda akan menggunakan komputer virtual yang berjalan di Microsoft Azure. Kami menyediakan mesin virtual yang dapat Anda gunakan selama durasi modul ini.

Dalam unit ini, Anda akan:

  • Buat mesin virtual Ubuntu di Azure untuk digunakan sebagai agen build Anda.
  • Buat kumpulan agen di Microsoft Azure DevOps.
  • Buat token akses untuk mengautentikasi agen Anda dengan Azure DevOps.
  • Konfigurasikan agen Anda dengan perangkat lunak yang diperlukan untuk membangun situs web Space Game.
  • Konfigurasikan agen Anda untuk tersambung ke Azure DevOps sehingga dapat menerima pekerjaan build.
  • Verifikasi bahwa agen tersambung ke Azure DevOps dan siap menerima pekerjaan build.

Ada banyak cara untuk membuat mesin virtual (VM) di Azure. Di unit ini, Anda akan membuat komputer virtual Ubuntu dengan menggunakan terminal interaktif yang disebut Cloud Shell.

Untuk mengonfigurasi mesin virtual, Anda memiliki beberapa pilihan:

  • Untuk mesin virtual Linux, Anda dapat tersambung langsung melalui SSH dan mengonfigurasi sistem Anda secara interaktif.
  • Anda dapat mengotomatiskan penyebaran menggunakan template ARM, Bicep, atau alat provisi otomatis lainnya.
  • Jika perlu menyebarkan banyak agen build, Anda dapat membuat citra mesin virtual yang memiliki semua perangkat lunak yang telah diinstal sebelumnya.

Mengonfigurasi sistem secara interaktif adalah cara yang baik untuk memulai, karena membantu Anda memahami proses dan apa yang diperlukan. Untuk menyederhanakan proses, sambungkan ke mesin virtual Ubuntu Anda melalui SSH dan jalankan skrip shell untuk menyiapkan agen build Anda.

Catatan

Jika Anda tidak terbiasa dengan menyambungkan atau mengonfigurasi sistem Linux, cukup ikuti saja. Anda dapat menerapkan konsep yang sama ke agen build Windows.

Membuat komputer virtual Linux

Di bagian ini, Anda membuat mesin virtual yang menjalankan Ubuntu 20.04, yang akan berfungsi sebagai agen build Anda. Mesin virtual belum disiapkan untuk menjadi agen build atau memiliki salah satu alat yang diperlukan untuk membangun aplikasi web Space Game. Anda akan segera menyiapkannya.

Munculkan Cloud Shell melalui portal Azure

Penting

Untuk menyelesaikan latihan dalam modul ini, Anda memerlukan langganan Azure Anda sendiri.

  1. Buka portal Microsoft Azure dan masuk.

  2. Dari menu, pilih Cloud Shell. Jika diminta, pilih pengalaman Bash.

    A screenshot of the Azure portal showing the location of the Cloud Shell menu item.

    Catatan

    Cloud Shell memerlukan sumber daya penyimpanan Azure untuk menyimpan file apa pun yang Anda buat di Cloud Shell. Saat pertama kali membuka Cloud Shell, Anda akan diminta untuk membuat grup sumber daya, akun penyimpanan, dan berbagi Azure Files. Penyiapan ini secara otomatis digunakan untuk semua sesi Cloud Shell di masa mendatang.

Pilih wilayah Azure

Wilayah adalah satu pusat data Azure atau lebih dalam lokasi geografis. US Timur, US Barat, dan Eropa Utara adalah contoh wilayah. Setiap sumber daya Azure, termasuk Azure VM, diberi wilayah.

Untuk membuat perintah lebih mudah dijalankan, mulailah dengan memilih wilayah default. Setelah Anda menentukan wilayah default, perintah selanjutnya menggunakan wilayah tersebut kecuali Anda menentukan wilayah yang berbeda.

  1. Dari Cloud Shell, untuk mencantumkan wilayah yang tersedia dari langganan Azure Anda, jalankan perintah berikut az account list-locations :

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. Dari kolom Name dalam output, pilih wilayah yang dekat dengan Anda. Misalnya, pilih eastasia atau westus2.

  3. Jalankan az configure untuk mengatur wilayah default Anda. Ganti <REGION> dengan nama wilayah yang Anda pilih:

    az configure --defaults location=<REGION>
    

    Contoh ini menetapkan westus2 sebagai wilayah default:

    az configure --defaults location=westus2
    

Buat grup sumber daya

Buat grup sumber daya untuk berisi sumber daya yang digunakan dalam modul pelatihan ini.

  • Untuk membuat grup sumber daya yang bernama tailspin-space-game-rg, jalankan perintah berikut az group create :

    az group create --name tailspin-space-game-rg
    

Buat VM

Untuk membuat VM Anda, jalankan perintah berikut az vm create :

az vm create \
    --name MyLinuxAgent \
    --resource-group tailspin-space-game-rg \
    --image canonical:0001-com-ubuntu-server-focal:20_04-lts:latest \
    --size Standard_DS2_v2 \
    --admin-username azureuser \
    --generate-ssh-keys

Mesin virtual Anda akan memakan waktu beberapa saat untuk muncul.

Standard_DS2_v2 menentukan ukuran mesin virtual. Ukuran mesin virtual menentukan kecepatan prosesor, jumlah memori, jumlah penyimpanan awal, dan bandwidth jaringan yang diharapkan. Ini adalah ukuran yang sama yang disediakan oleh agen yang dihosting Microsoft. Dalam praktiknya, Anda dapat memilih ukuran yang menyediakan lebih banyak daya komputasi atau kemampuan tambahan, seperti pemrosesan grafis.

Argumen --resource-group menentukan grup sumber daya yang menyimpan semua hal yang perlu kita buat. Grup sumber daya memungkinkan Anda mengelola semua mesin virtual, disk, antarmuka jaringan, dan elemen lain yang membentuk solusi kami sebagai satu unit.

Membuat kumpulan agen

Ingat bahwa kumpulan agen mengelola agen build. Di bagian ini, Anda akan membuat kumpulan agen di Azure DevOps. Nantinya, Anda akan menentukan nama kumpulan agen saat mengonfigurasi agen sehingga dapat mendaftarkan dirinya sendiri ke kumpulan yang benar.

  1. Di Azure DevOps, buka proyek Space Game - web - Agent.

  2. Pilih Pengaturan proyek.

  3. Di Alur, pilih Kumpulan agen.

    A screenshot of the project settings in Azure DevOps showing the location of the Agent pools menu item.

  4. Select Add kumpulan.

  5. Di jendela Tambahkan kumpulan:

    1. Di Kumpulan untuk ditautkan, pilih Baru.
    2. Di Jenis kumpulan, pilih Dihost sendiri.
    3. Di Nama, masukkan MyAgentPool.

    Dalam praktiknya, Anda akan memilih nama yang lebih deskriptif untuk kumpulan Anda.

  6. Pilih Buat. Kumpulan agen baru muncul dalam daftar.

Membuat token akses pribadi

Agar agen build Anda mendaftarkan dirinya dengan Azure DevOps, Anda memerlukan cara bagi agen tersebut untuk mengautentikasi dirinya sendiri.

Untuk melakukannya, Anda dapat membuat token akses pribadi. Token akses pribadi—atau PAT—adalah alternatif untuk kata sandi. Anda dapat menggunakan PAT untuk mengautentikasi dengan layanan seperti Azure DevOps.

Penting

Seperti yang Anda lakukan dengan kata sandi, pastikan untuk menyimpan token akses Anda di tempat aman. Di bagian ini, Anda akan menyimpan token akses sebagai variabel lingkungan sehingga tidak muncul di skrip shell Anda.

  1. Di Azure DevOps, buka pengaturan profil Anda, lalu pilih Token akses pribadi.

    A screenshot of Azure DevOps showing the location of the Personal access tokens menu item.

  2. Pilih Token Baru.

  3. Masukkan nama untuk token Anda, seperti Agen build.

  4. Di bawah Cakupan, pilih tautan Perlihatkan semua cakupan di bagian bawah.

  5. Cari Kumpulan Agen, lalu pilih Baca &kelola.

  6. Pilih Buat.

  7. Salin token ke tempat yang aman.

    Kemudian, Anda akan menggunakan token untuk memungkinkan agen build mengautentikasi akses ke Azure Pipelines.

Sambungkan ke VM Anda

Di bagian ini, Anda akan terhubung ke VM Linux melalui SSH sehingga Anda dapat mengonfigurasinya.

Ingat bahwa Anda tidak dapat masuk secara interaktif ke agen yang dihosting Microsoft. Karena agen build privat adalah milik Anda sendiri, Anda dapat masuk dan mengonfigurasinya sesuka Anda.

Kemampuan untuk terhubung ke agen build memungkinkan Anda mengonfigurasinya dengan alat yang Anda butuhkan untuk membangun perangkat lunak Anda. Ini juga memungkinkan Anda untuk memecahkan masalah saat Anda membangun konfigurasi alur Anda.

  1. Untuk mendapatkan alamat IP VM Anda, jalankan az vm show di Cloud Shell:

    IPADDRESS=$(az vm show \
      --name MyLinuxAgent \
      --resource-group tailspin-space-game-rg \
      --show-details \
      --query [publicIps] \
      --output tsv)
    

    Perintah ini menyimpan alamat IP dalam variabel Bash bernama IPADDRESS.

  2. Cetak alamat IP VM ke konsol:

    echo $IPADDRESS
    
  3. Buat koneksi SSH ke VM Anda. Sebagai ganti $IPADDRESS, masukkan alamat IP yang Anda terima di langkah sebelumnya . Pada perintah, masukkan ya untuk melanjutkan penyambungan.

    ssh azureuser@$IPADDRESS
    

    Anda sekarang terhubung ke mesin virtual Anda melalui SSH.

    Perintah ini berfungsi karena Anda memberikan opsi --generate-ssh-keys saat menjalankan az vm create sebelumnya. Opsi ini membuat pasangan kunci SSH, yang memungkinkan Anda masuk ke mesin virtual.

Menginstal alat build di mesin virtual Anda

Di bagian ini, Anda akan mengonfigurasi VM dengan alat yang diperlukan untuk membangun situs web Space Game .

Ingat bahwa proses build Anda yang sudah ada menggunakan alat berikut:

  • SDK .NET, yang digunakan untuk membangun aplikasi
  • Node.js, yang digunakan untuk menjalankan tugas build
  • npm, pengelola paket untuk Node.js
  • gulp, paket Node.js yang digunakan untuk mengecilkan file JavaScript dan CSS

Ini adalah alat utama yang diperlukan proses build. Untuk menginstalnya, Anda akan mengunduh dan menjalankan skrip shell dari GitHub.

Catatan

Proses build menggunakan alat lain, seperti node-sass, untuk mengonversi file Sass (.scss) ke file CSS (.css). Namun, Node.js menginstal alat-alat ini saat build berjalan.

Mari kita mulai dengan memperbarui pengelola paket Ubuntu, bernama apt. Tindakan ini mengambil informasi terbaru dari repositori paket dan biasanya merupakan hal pertama yang Anda lakukan saat menyiapkan sistem Ubuntu baru.

  1. Di koneksi SSH Anda, perbarui cache manajer paket apt:

    sudo apt-get update
    

    sudo menjalankan perintah dengan administrator, atau root, hak istimewa.

  2. Untuk mengunduh skrip shell bernama build-tools.sh dari GitHub, jalankan perintah curl berikut:

    curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-tools.sh > build-tools.sh
    
  3. Cetak skrip ke terminal sehingga Anda dapat memeriksa isinya:

    cat build-tools.sh
    

    Hasil berikut akan ditampilkan:

    #!/bin/bash
    set -e
    
    # Select a default .NET version if one is not specified
    if [ -z "$DOTNET_VERSION" ]; then
      DOTNET_VERSION=6.0.300
    fi
    
    # Add the Node.js PPA so that we can install the latest version
    curl -sL https://deb.nodesource.com/setup_16.x | bash -
    
    # Install Node.js and jq
    apt-get install -y nodejs
    
    apt-get install -y jq
    
    # Install gulp
    npm install -g gulp
    
    # Change ownership of the .npm directory to the sudo (non-root) user
    chown -R $SUDO_USER ~/.npm
    
    # Install .NET as the sudo (non-root) user
    sudo -i -u $SUDO_USER bash << EOF
    curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin -c LTS -v $DOTNET_VERSION
    EOF
    

    Skrip menginstal Node.js, npm, gulp, dan Core .NET.

    Dengan mengatur variabel lingkungan DOTNET_VERSION, Anda dapat menentukan versi .NET yang akan diinstal. Jika Anda tidak mengatur variabel ini, skrip akan menginstal versi yang digunakan konfigurasi build yang ada. Untuk tujuan pembelajaran, Anda tidak mengatur variabel ini. Anda mengizinkan skrip untuk menggunakan versi default.

  4. Buat skrip dapat dieksekusi, lalu jalankan skrip:

    chmod u+x build-tools.sh
    sudo ./build-tools.sh
    

    Skrip ini membutuhkan waktu beberapa menit untuk dijalankan.

    Dalam praktiknya, Anda sekarang dapat menjalankan perintah untuk memverifikasi bahwa setiap komponen perangkat lunak berhasil diinstal.

Menginstal perangkat lunak di mesin virtual Anda

Sekarang saatnya untuk menginstal perangkat lunak agen di mesin virtual Anda. Perangkat lunak ini memungkinkan mesin virtual untuk bertindak sebagai agen build dan menerima pekerjaan build dari Azure Pipelines.

Proses pendaftaran memeriksa perangkat lunak yang diinstal sebelum mendaftarkan agen dengan Azure Pipelines. Oleh karena itu, penting untuk menyiapkan agen setelah Anda menginstal semua perangkat lunak lain. Dalam praktiknya, Anda dapat mendaftarkan agen dua kali jika perlu menginstal perangkat lunak tambahan.

Dokumentasi ini menjelaskan cara menyiapkan agen Linux yang dihost sendiri secara manual serta agen macOS dan Windows. Anda menjalankan skrip shell untuk mengonfigurasi agen Anda dengan cara yang sama seperti Anda menyiapkan alat build di bagian sebelumnya.

Penting

Skrip yang Anda jalankan di sini untuk tujuan pembelajaran. Dalam praktiknya, Anda harus terlebih dahulu memahami bagaimana setiap perintah dalam skrip yang Anda bangun memengaruhi sistem secara keseluruhan. Di akhir modul, kita akan menampilkan dokumentasi yang lebih sepenuhnya menjelaskan opsi Anda.

  1. Untuk mengunduh skrip shell bernama build-agent.sh dari GitHub, jalankan perintah curl berikut:

    curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-agent.sh > build-agent.sh
    
  2. Cetak skrip ke terminal sehingga Anda dapat memeriksa isinya:

    cat build-agent.sh
    

    Hasil berikut akan ditampilkan:

    #!/bin/bash
    set -e
    
    # Select a default agent version if one is not specified
    if [ -z "$AZP_AGENT_VERSION" ]; then
      AZP_AGENT_VERSION=2.187.2
    fi
    
    # Verify Azure Pipelines token is set
    if [ -z "$AZP_TOKEN" ]; then
      echo 1>&2 "error: missing AZP_TOKEN environment variable"
      exit 1
    fi
    
    # Verify Azure DevOps URL is set
    if [ -z "$AZP_URL" ]; then
      echo 1>&2 "error: missing AZP_URL environment variable"
      exit 1
    fi
    
    # If a working directory was specified, create that directory
    if [ -n "$AZP_WORK" ]; then
      mkdir -p "$AZP_WORK"
    fi
    
    # Create the Downloads directory under the user's home directory
    if [ -n "$HOME/Downloads" ]; then
      mkdir -p "$HOME/Downloads"
    fi
    
    # Download the agent package
    curl https://vstsagentpackage.azureedge.net/agent/$AZP_AGENT_VERSION/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz > $HOME/Downloads/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz
    
    # Create the working directory for the agent service to run jobs under
    if [ -n "$AZP_WORK" ]; then
      mkdir -p "$AZP_WORK"
    fi
    
    # Create a working directory to extract the agent package to
    mkdir -p $HOME/azp/agent
    
    # Move to the working directory
    cd $HOME/azp/agent
    
    # Extract the agent package to the working directory
    tar zxvf $HOME/Downloads/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz
    
    # Install the agent software
    ./bin/installdependencies.sh
    
    # Configure the agent as the sudo (non-root) user
    chown $SUDO_USER $HOME/azp/agent
    sudo -u $SUDO_USER ./config.sh --unattended \
      --agent "${AZP_AGENT_NAME:-$(hostname)}" \
      --url "$AZP_URL" \
      --auth PAT \
      --token "$AZP_TOKEN" \
      --pool "${AZP_POOL:-Default}" \
      --work "${AZP_WORK:-_work}" \
      --replace \
      --acceptTeeEula
    
    # Install and start the agent service
    ./svc.sh install
    ./svc.sh start
    

    Anda tidak perlu memahami cara kerja setiap baris, tetapi berikut adalah ringkasan singkat tentang apa yang dilakukan skrip ini:

    • Skrip ini mengunduh paket agen sebagai file .tar.gz dan mengekstrak kontennya.
    • Dalam file yang diekstrak, skrip:
      • Menjalankan skrip shell bernama installdependencies.sh untuk menginstal perangkat lunak agen.
      • Menjalankan skrip shell bernama config.sh untuk mengonfigurasi agen dan mendaftarkan agen dengan Azure Pipelines.
      • Menjalankan skrip shell bernama svc.sh untuk menginstal dan memulai layanan agen.

    Skrip ini menggunakan variabel lingkungan untuk memungkinkan Anda memberikan detail tentang organisasi Azure DevOps Anda. Berikut ringkasannya:

    Variabel Bash Deskripsi Default
    AZP_AGENT_VERSION Versi perangkat lunak agen yang akan diinstal Versi yang terakhir kami gunakan untuk menguji modul ini
    AZP_URL URL organisasi Azure DevOps Anda (Tidak Ada)
    AZP_TOKEN Token akses pribadi Anda (Tidak Ada)
    AZP_AGENT_NAME Nama agen Anda seperti yang muncul di Azure DevOps Nama host sistem
    AZP_POOL Nama kumpulan agen Anda Default
    AZP_WORK Direktori kerja bagi agen untuk menjalankan tugas build _work

    Jika skrip tidak memberikan nilai default untuk variabel yang tidak diatur, skrip mencetak pesan kesalahan dan akan segera keluar.

    Dalam langkah-langkah berikut, atur variabel lingkungan ini:

    • AZP_AGENT_VERSION
    • AZP_URL
    • AZP_TOKEN
    • AZP_AGENT_NAME
    • AZP_POOL

    Untuk saat ini, kami sarankan Anda membiarkan variabel lain tidak diatur.

  3. Atur variabel lingkungan AZP_AGENT_NAME untuk menentukan nama agen Anda. Kami merekomendasikan MyLinuxAgent.

    export AZP_AGENT_NAME=MyLinuxAgent
    
  4. Atur variabel lingkungan AZP_URL untuk menentukan URL ke organisasi Azure DevOps Anda.

    Ganti <organisasi> dengan organisasi Anda. Anda bisa mendapatkan nama dari tab browser yang menampilkan Azure DevOps.

    export AZP_URL=https://dev.azure.com/organization
    
  5. Atur AZP_TOKEN variabel lingkungan untuk menentukan token akses pribadi Anda (nilai token panjang yang Anda salin sebelumnya di unit ini).

    Ganti <token> dengan token Anda.

    export AZP_TOKEN=token
    
  6. Atur variabel lingkungan AZP_POOL untuk menentukan nama kumpulan agen Anda. Sebelumnya, Anda membuat kumpulan bernama MyAgentPool.

    export AZP_POOL=MyAgentPool
    
  7. Atur variabel lingkungan AZP_AGENT_VERSION untuk menentukan versi terbaru agen.

    export AZP_AGENT_VERSION=$(curl -s https://api.github.com/repos/microsoft/azure-pipelines-agent/releases | jq -r '.[0].tag_name' | cut -d "v" -f 2)
    

    Alur YAML pada komputer Linux harus menggunakan versi terbaru agen, bahkan jika masih pra-rilis. Perangkat lunak agen terus diperbarui, sehingga Anda curl informasi versi dari repositori GitHub. Perintah ini menggunakan jq untuk membaca versi terbaru dari string JSON yang ditampilkan.

  8. Cetak versi agen ke konsol. Secara opsional, periksa untuk memastikan ini adalah versi terbaru.

    echo $AZP_AGENT_VERSION
    
  9. Buat skrip dapat dieksekusi, lalu jalankan:

    chmod u+x build-agent.sh
    sudo -E ./build-agent.sh
    

    sudo memungkinkan skrip berjalan sebagai pengguna root. Argumen -E mempertahankan variabel lingkungan saat ini, termasuk variabel yang Anda tetapkan, sehingga tersedia untuk skrip.

    Saat skrip berjalan, Anda dapat melihat agen tersambung ke Azure DevOps, melihatnya ditambahkan ke kumpulan agen, dan melihat koneksi agen diuji.

Memverifikasi bahwa layanan agen berjalan

Anda telah berhasil menginstal alat build dan perangkat lunak agen di mesin virtual Anda. Sebagai langkah verifikasi, buka Azure DevOps dan lihat agen Anda di kumpulan agen.

  1. Di Azure DevOps, buka proyek Space Game - web - Agent.

  2. Pilih Pengaturan proyek.

  3. Di Alur, pilih Kumpulan agen.

  4. Pilih MyAgentPool.

  5. Pilih tab Agen.

    Anda dapat melihat bahwa agen Anda online dan siap untuk menerima pekerjaan build.

    A screenshot of Azure DevOps showing the status of the private agent. The agent shows as online, idle, and enabled.

    Tip

    Jika agen build Anda ditampilkan sebagai Offline, coba tunggu beberapa saat lalu refresh halaman.

  6. Pilih agen Anda, MyLinuxAgent.

  7. Pilih tab Kemampuan.

    Selama penyiapan, proses konfigurasi memindai agen build Anda untuk kemampuan alat. Anda melihat bahwa npm terdaftar sebagai salah satunya. Ingat bahwa konfigurasi build asli Anda menentukan jika npm harus diinstal di agen.

    A screenshot of Azure DevOps showing a few of the agent's capabilities. The npm capability is highlighted.

    Saat menentukan kumpulan agen mana yang akan digunakan, Anda dapat menyertakan salah satu entri ini di bagian demands Anda. Menyertakannya memastikan bahwa Azure Pipelines memilih agen build yang memiliki perangkat lunak yang Anda butuhkan untuk membangun aplikasi Anda. Ini juga memungkinkan Anda untuk membuat kumpulan agen dengan berbagai konfigurasi perangkat lunak. Azure Pipelines akan memilih konfigurasi yang benar berdasarkan kebutuhan Anda.