Coding4ever’s Blog

Just coding… coding… and coding… because coding should be fun :)

Membangun Server CI (Continuous Integration) Di Windows Untuk Platform .NET Menggunakan Jenkins Bagian #2

| Comments

Pada postingan sebelumnya kita sudah membuat project/job sederhana menggunakan Jenkins untuk melakukan proses build, dan untuk postingan kali ini kita akan menambahkan proses deploy. Kalo masih bingung dengan istilah deploy di sini, anggap saja seperti kita membuat paket installer yang akan didistribusikan ke komputer klien. Nah dengan menggunakan CI semua proses ini bisa dilakukan secara otomatis dan terpusat, sehingga kita mempunyai histori hasil build dan deploy dari waktu ke waktu. Jadi untuk mencari file setup/paket installer terakhir enggak usah lagi nanya ke developer karena bisa langsung kita download dari server CI-nya.

Inno Setup

Inno Setup adalah tool untuk membuat paket installer yang gratis dan open source. Selain itu kita juga bisa menggunakan tool installer lainnya seperti NSIS. Untuk informasi lebih lanjut tentang Inno Setup dan NSIS bisa langsung ke sini dan sini.

Jadi di postingan kali ini kita akan menggunakan Inno Setup untuk keperluan proses deploy. Sebagai contoh berikut adalah skrip Inno Setup untuk project Northwind yang kita gunakan sebagai contoh project.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#define AppName 'Northwind App'
#define AppDir 'Northwind'
#define AppExeName 'Northwind.WinFormApp.exe'
#define AppVendorName 'KR Software'
#define AppCopyright 'Copyright © 2016. ' + AppVendorName
#define AppURL 'http://coding4ever.net/'
#define AppVersion GetFileVersion('bin\' + AppExeName)
#define AppMainIcon 'mainIcon.ico'

[Setup]
AppName={#AppName}
AppVerName={#AppName} Versi {#AppVersion}
AppPublisher={#AppVendorName}
AppVersion={#AppVersion}
AllowCancelDuringInstall = yes
DefaultDirName={pf}\{#AppVendorName}\{#AppDir}
DefaultGroupName={#AppVendorName}
Compression = lzma
SolidCompression = yes
OutputDir=new-release
OutputBaseFilename=Setup-v{#AppVersion}
AllowNoIcons = yes
AlwaysRestart = no
AlwaysShowComponentsList = no
DisableProgramGroupPage = yes
AppendDefaultDirName = yes
CreateUninstallRegKey = yes
DisableStartupPrompt = yes
LanguageDetectionMethod=none
ShowLanguageDialog=no
UsePreviousLanguage=no
Uninstallable = yes
UninstallFilesDir={app}\uninst
UninstallDisplayIcon={app}\{#AppExeName},0
UninstallDisplayName={#AppName}
WindowVisible = no
AppCopyright={#AppCopyright}
FlatComponentsList = yes
PrivilegesRequired = admin
VersionInfoVersion={#AppVersion}

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkedonce
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
;My Application Runtime
Source: bin\*.exe; DestDir: {app}; Flags: ignoreversion
Source: bin\*.dll; DestDir: {app}; Flags: ignoreversion

[Icons]
Name: {group}\{#AppName}; Filename: {app}\{#AppExeName}; WorkingDir: {app}; IconFilename: {app}\{#AppMainIcon}
Name: {userdesktop}\{#AppName}; Filename: {app}\{#AppExeName}; WorkingDir: {app}; IconFilename: {app}\{#AppMainIcon}; Tasks: desktopicon

[Code]
procedure AboutButtonOnClick(Sender: TObject);
begin
  MsgBox('{#AppName}' #13#13 '{#AppCopyright}' #13 '{#AppURL}', mbInformation, mb_Ok);
end;

procedure CreateAboutButtonAndURLLabel(ParentForm: TSetupForm; CancelButton: TNewButton);
var
  AboutButton: TNewButton;
begin
  AboutButton := TNewButton.Create(ParentForm);
  AboutButton.Left := ParentForm.ClientWidth - CancelButton.Left - CancelButton.Width;
  AboutButton.Top := CancelButton.Top;
  AboutButton.Width := CancelButton.Width;
  AboutButton.Height := CancelButton.Height;
  AboutButton.Caption := '&About...';
  AboutButton.OnClick := @AboutButtonOnClick;
  AboutButton.Parent := ParentForm;  
end;

procedure InitializeWizard();
begin
  CreateAboutButtonAndURLLabel(WizardForm, WizardForm.CancelButton);  
end;

Kemudian simpan skrip di atas di folder workspace\deploy. Workspace adalah folder di mana project atau job disimpan.

Menambahkan Proses Deploy

  • Akses link : http://localhost:8080/, kemudian login
  • Klik link project northwind-build

  • Di halaman project northwind-build, klik link Configure

  • Berikutnya aktifkan tab Build, klik Add build step kemudian pilih Execute Windows batch command

    Kemudian isikan skripnya seperti berikut

    Tidak ada yang aneh dengan skrip di atas, hanya sekumpulan batch commands yang tentunya Anda dan Saya sudah familiar dengannya. Coba perhatikan lagi skrip di atas, di sana ada variabel %WORKSPACE% yang merupakan variabel built-innya Jenkins, dan jika mengacu pada project northwind-build di atas maka isinya adalah “C:\Program Files (x86)\Jenkins\workspace\northwind-build”.

Menambahkan Artifact

Artifact adalah output dari proses build, bisa berupa file exe, dll atau file dengan ekstensi lainnya. File-file artifact ini nantinya akan tersedia untuk di download di halaman project. Berikut langkah-langkah untuk menambahkan artifact :

  • Masih di halaman Configure, aktifkan tab Post-build Actions klik Add post-build action kemudian pilih Archive the artifacts.

  • Isikan nama-nama file artifact yang perlu di arsipkan, misal kita hanya mengarsipkan file Setup.exe

    Jika file artifactnya lebih dari satu pisahkan dengan tanda koma, contoh : deploy\new-release\Setup*.exe, deploy\help\file_bantuan.chm, deploy\help\video_tutorial.avi.

  • Terakhir klik Save

Testing Build dan Deploy

Setelah menyelesaikan tambahan konfigurasi deploy, saatnya melakukan pengetesan apakah konfigurasinya sudah benar. Berikut langkah-langkahnya :

  • Kembali ke halaman project northwind-build, kemudian klik link Build Now

  • Di informasi Build History akan terlihat progress build dengan nama #1, #2, … dst

  • Jika proses build-nya sukses penanda bulat-nya berwarna biru, jika warna merah berarti gagal

  • Setelah build selesai, di halaman project northwind-build akan tersedia link download file artifact

Selamat Mencoba :-)

Comments