Huaahhh… ini kasus yang umum namun anehnya agak perlu sedikit effort untuk bisa berhasil. Kasus apa sih?
Oke.. jadi begini kawan-kawan. Pada umumnya, tim development di setiap perusahaan punya class library sendiri, komponen buatan mereka sendiri. Tentunya itu sangat wajar. Nah, di lain hari, ada proyek lain yang hendak memanfaatkan library yang dihasilkan. Kalau kita pakai Visual Studio seperti biasanya, ini bukanlah masalah. Tinggal Add Reference ke file .dll yang dihasilkan.. beres! Atau bisa juga Add Existing Project, kemudian Add Reference ke proyek yang baru saja di-add, itu juga beresss..!
Nah, yang ini bukanlah sekedar Viusal Studio saja, melainkan menggunakan Team Foundation Server, alias Source Code ada di server. Kalau pakai TFS dan build di local, itu memang masih tetap jalan. Namun kalau pakai TFS plus build di server dengan menggunakan TFS Team Build, ini baru masalah… Karena tentunya komposisi file di server dengan di local kan beda.. begitu kita build, akan ada error yang bilang bahwa blahblah.sln does not exist..
Okeh, kita langsung praktek aja deh. Saya jalankan skenario ini dengan menggunakan VPC lho ya.. kalau mau VPC nya, bisa di-download di sini. Atau kalau mau copy dari saya, silahkan datang ke kantor Microsoft Indonesia yah ^_^
Skenario
Perusahaan X membuat dua buah Team Project. Team Project yang pertama, yang diberi nama SharedLibrary, berisi library dan komponen yang nantinya akan digunakan pada aplikasi sebenarnya. Team Project yang ke dua, yang diberi nama CompanyWeb, berisi sebuah ASP.NET Web Application (ingat, Web Application, bukan Website!) yang akan menggunakan library yang dihasilkan oleh SharedLibrary.
Membuat Team Project SharedLibrary
Pertama-tama, buka Visual Studio (pastinya) kemudian pilih menu File > New > Team Project…
Akan muncul window New Team Project. Isi nama untuk Team Project dengan SharedLibrary
Pilih MSF for Agile Software Development – v4.2
Isi title untuk Team Project Portal dengan SharedLibrary dan description dengan SharedLibrary Team Portal
Pilih Create an empty source control folder
Klik tombol Finish
Tunggu sampai proses pembuatan Team Project selesai
Jika sudah selesai, uncheck pilihan Launch the process guidance kemudian klik tombol Close
Membuat Team Project CompanyWeb
Dengan cara yang sangat mirip dengan cara di atas, buatlah sebuah Team Project lagi, kali ini dengan nama CompanyWeb.
Setelah menyelesaikan langkah ini, kita akan punya folder SharedLibrary dan CompanyWeb di window Team Explorer.
Mengisi Team Project SharedLibrary
Saat ini, kedua Team Project masih kosong. Belum ada source code-nya. Untuk SharedLibrary, kita akan isi dengan sebuah project Class Library. Pertama-tama, pastikan bahwa kita dalam keadaan memilih SharedLibrary pada window TeamExplorer. Tandanya bahwa kita sedang memilih SharedLibrary adalah tulisan SharedLibrary akan di-bold.
Pilih menu File > New > Project…
Pilih Visual C# sebagai Project types, pilih Class Library sebagai Template, beri nama SharedLibrary, pilih C:\Futorial sebagai lokasi, beri tanda check pada pilihan Create directory for solution dan beri tanda check juga pada pilihan Add to Source Control. Klik tombol OK.
Pastikan bahwa Team Project yang terpilih adalah yang SharedLibrary. Klik tombol OK.
Di Solution Explorer, perhatikan akan ada tanda
di file-file yang akan ditambahkan ke source code control.
Ganti nama file Class1.cs menjadi FuCalculator.cs. Ubah isinya menjadi seperti berikut
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SharedLibrary
{
public class FuCalculator
{
public int Tambah(int a, int b)
{
return a + b;
}
}
}
Simpan FuCalculator.cs. Klik kanan project SharedLibrary di Solution Explorer kemudian pilih Properties. Pilih menu Build Events, isi Post-build event command line dengan teks berikut: xcopy /Y /S "$(TargetPath)" "$(SolutionDir)\result\"
Simpan dengan Ctrl+S. Sekarang coba kita build secara local. Tekan Ctrl+Shift+B. Jika build berhasil, cek folder C:\Futorial\SharedLibrary\result yang seharusnya ada file SharedLibrary.dll di sana.
Setelah memastikan, check in file-file ini ke TFS. Caranya yaitu pada Solution Explorer, klik kanan Solution ‘SharedLibrary’ kemudian pilih Check In…
Tulis Initial Check In sebagai Comment kemudian klik tombol Check In
Mapping Workspace antara Server dengan Local
Double-click Source Control pada folder SharedLibrary yang ada di Team Explorer.
Sebenarnya folder SharedLibrary di dalam folder SharedLibrary sudah ada mappingnya di local, yaitu C:\Futorial\SharedLibrary. Namun justru folder parentnya, yaitu folder SharedLibrary belum di-map. Maka dari itu klik link Not Mapped, kemudian tulis C:\Futorial, kemudian klik tombol Change
Pilih Yes
Membuat Web Application untuk Team Project CompanyWeb
Tutup solusi yang sedang dibuka sekarang dengan menu File > Close Solution. Buat sebuah Web Application dengan menu File > New > Project…
Isi dengan pilihan-pilihan sesuai dengan gambar berikut
Klik kanan folder References pada Solution Explorer, kemudian pilih Add Reference…
Pilih tab Browse, kemudian pilih SharedLibrary.dll yang ada di folder C:\Futorial\SharedLibrary\result
Ganti code Default.aspx.cs menjadi seperti berikut
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CompanyWeb
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(new SharedLibrary.FuCalculator().Tambah(3, 7));
}
}
}
Tekan Ctrl+F5 untuk build local dan memastikan hasilnya benar. Pada window Team Explorer, pastikan Team Project CompanyWeb sedang dalam keadaan terpilih. Kembali ke Solution Explorer, klik kanan Solution ‘CompanyWeb’, kemudian pilih Add Solution to Source Control. Setelah berhasil, klik kanan lagi Solution ‘CompanyWeb’, kemudian pilih Check In. Tulis Initial Check In sebagai Comment.
Membuat Build Definition untuk CompanyWeb
Beralih ke Team Explorer, pada klik kanan folder Builds di Team Project CompanyWeb, kemudian pilih New Build Definition…
Pada tab General, isi sesuai dengan gambar berikut
Pada tab Project File, klik tombol Create
Akan muncul window MSBuild Project File Creation Wizard. Check pilihan (Select All) kemudian klik Next dua kali hingga tombol Finish bisa di-klik. Klik tombol Finish.
Beralih ke tab Build Defaults. Klik tombol New pada pilihan Build Agent. Akan muncul window Build Agent Properties. Isi sesuai dengan gambar berikut.
Kembali ke tab Build Defaults. Isi pilihan Builds will be staged to the following share dengan \\tfsrtm08\drops
Klik tombol OK. Akan muncul CompanyWebBuildManual di folder Builds.
Melakukan Team Build pada Team Project CompanyWeb
Kita coba jalankan build yang telah kita buat pada langkah sebelumnya. Nantinya, build ini akan gagal. Klik kanan CompanyWebBuildManual kemudian pilih Queue New Build…
Klik tombol Queue
Akan muncul window Build Explorer. Tunggu sebentar, hasilnya akan terlihat bahwa proses build gagal. Hal ini karena project SharedLibrary tidak dikenali.
Membetulkan definisi dari CompanyWebBuildManual
Ubah definisi dari CompanyWebBuildManual secara manual. Caranya, ke window Source Control Explorer, kemudian pada Team Project CompanyWeb akan ada folder TeamBuildTypes (kalau belum muncul, klik tombol Refresh). Di dalam folder TeamBuildTypes akan ada folder CompanyWebBuildManual. Nahh, di dalam situ ada file TFSBuild.proj. Klik kanan file itu kemudian pilih Get Latest Version. Setelah itu, klik kanan lagi kemudian pilih Check Out for Edit…
Klik tombol Check Out
Klik kanan lagi file tersebut, kemudian pilih View. File tersebut akan dibuka di Visual Studio.
Di dalam tag PropertyGroup yang pertama, tambahkan code ini pada bagian akhir (sebelum tag penutup PropertyGroup)
<SkipInitializeWorkspace>true</SkipInitializeWorkspace>
<TfCommand>$(TeamBuildRefPath)\..\tf.exe</TfCommand>
Tambahkan tag berikut setelah tag penutup PropertyGroup
<ItemGroup>
<SolutionToBuild Include="$(SolutionRoot)\SharedLibrary\SharedLibrary.sln" />
<SolutionToBuild Include="$(SolutionRoot)\CompanyWeb\CompanyWeb.sln" />
</ItemGroup>
<ItemGroup>
<Map Include="$/CompanyWeb">
<LocalPath>$(SolutionRoot)\CompanyWeb</LocalPath>
</Map>
<Map Include="$/SharedLibrary">
<LocalPath>$(SolutionRoot)\SharedLibrary</LocalPath>
</Map>
</ItemGroup>
<Target Name="BeforeGet">
<DeleteWorkspaceTask TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
Name="$(WorkspaceName)" />
<Exec
WorkingDirectory="$(SolutionRoot)"
Command=""$(TfCommand)" workspace /new $(WorkSpaceName) /server:$(TeamFoundationServerUrl)"/>
<Exec
WorkingDirectory="$(SolutionRoot)"
Command=""$(TfCommand)" workfold /unmap /workspace:$(WorkSpaceName) "$(SolutionRoot)""/>
<Exec
WorkingDirectory="$(SolutionRoot)"
Command=""$(TfCommand)" workfold /map /workspace:$(WorkSpaceName) /server:$(TeamFoundationServerUrl) "%(Map.Identity)" "%(Map.LocalPath)""/>
</Target>
Simpan file tersebut. Kembali ke Source Control Explorer. Klik kanan file TFSBuild.proj kemudian pilih Check In Pending Changes…
Klik tombol Check In. Setelah itu, ke Team Explorer, kita masukkan lagi CompanyWebBuildManual ke antrian (klik kanan kemudian pilih Queue New Build).
Sekarang, hasilnya adalaaaahh: build kita sudah berhasil!
Horeeeee!!!
Referensi