Build Otomatis Project Visual Basic 6 Menggunakan Jenkins

Posted by Kamarudin • 3 minute read • Comments

Mas kalo di tempat saya masih menggunakan tool jadul seperti Visual Basic 6 untuk pengembangan aplikasinya, apakah masih bisa menggunakan Jenkins sebagai software CInya ? Jawabannya bisa, walaupun secara plugin, di Jenkins belum ada plugin khusus untuk keperluan “build otomatis project Visual Basic 6” seperti halnya di .NET yang sudah tersedia plugin MSBuild. Sebagai solusinya kita bisa menggunakan skrip psake yang ditulis menggunakan bahasa PowerShell. Kalo masih bingung dengan skrip psake, skrip ini mirip dengan skrip rake yang dibuat menggunakan bahasa Ruby.

Environment Test

Untuk keperluan postingan kali ini, saya menggunakan environment test sebagai berikut:

Server CI (Continuous Integration)
  • Windows Server 2008 R2
  • Software CI (Continuous Integration) menggunakan Jenkins
  • Source/version control Git
  • Server Repository Git menggunakan Bonobo Git Server
  • Microsoft Visual Studio/Basic 6.0
  • Library (dll/ocx) pihak ketiga
  • Skrip psake - psake is a build automation tool written in PowerShell
  • UPX - UPX is a free, portable, extendable, high-performance executable packer for several executable formats

PC/Laptop Development

  • Microsoft Visual Studio/Basic 6.0
  • Source/version control Git
  • TortoiseGit

Skrip Build Otomatis Project Visual Basic 6

Secara plugin di Jenkins memang belum tersedia plugin khusus untuk keperluan “build project Visual Basic 6” tapi sebagai solusinya kita bisa menggunakan skrip psake untuk keperluan ini. Contoh skrip psake untuk keperluan build otomatis project Visual Basic 6 bisa Anda download di sini.

Berikut contoh skripnya:

# This build assumes the following directory structure
# Script assumes all directories exists, initialized by a parent script
#
# \build_artifact - This folder is created if it is missing and contains output of the build
# \build_log      - This folder is created if it is missing and contains log of the build
# \src            - This folder contains the source code or project you want to build

# run : .\psake.ps1 build.ps1

# properties that is used by the script
properties {        			
	$vb6bin = "C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE"
	
	$build_dir = Split-Path $psake.build_script_file        
	$src_dir = "$build_dir\src"
	$build_artifact_dir = "$build_dir\build_artifact"
	$build_log_dir = "$build_dir\build_log"
	
	$project_name = "Northwind.vbp"
	$project = "$src_dir\$project_name"		        
	$logfile = "$build_log_dir\$project_name.log"
}

function NormalizeOutDir($outdir) {
	if (-not ($outdir.EndsWith("\"))) {
		$outdir += '\'
	}

	if ($outdir.Contains(" ")) {
		$outdir = $outdir + "\"
	}

	return $outdir
}

function HasFailed($logFile) {
	return ((Select-String "failed" $logfile -Quiet) -or (Select-String "not found" $logfile -Quiet))
}

function HasSucceeded($logFile) {
	return (Select-String "succeeded" $logFile -Quiet)
}

FormatTaskName (("-"*25) + "[{0}]" + ("-"*25))

Task Default -Depends Build

Task Build -Depends CreateLogFile {				
    $outdir = NormalizeOutDir("$build_artifact_dir")
    $failed = $false
    $retries = 0
    $succeeded = $false
	
    Write-Host "Building $name" -ForegroundColor Green
	
	try {
		Exec {& $vb6bin /m $project /out $logfile /outdir $outdir}
	} catch {
		$failed = $true
	}

    while (!($failed -or $succeeded)) {
        Write-Host -NoNewline "."
        Start-Sleep -s 1
        $failed = HasFailed($logfile)
        $succeeded = HasSucceeded($logfile)
        $retries = $retries + 1
        $failed = ($failed -or ($retries -eq 60)) -and !$succeeded
    }

    if ($failed)
    {
        Type $logfile
        throw "Unable to build $name"
    }
    Type $logfile
}

Task CreateLogFile {
	If (!(Test-Path $build_artifact_dir)) 
	{
		New-Item -Path $build_artifact_dir -ItemType Directory
	}
	
	If (!(Test-Path $build_log_dir)) 
	{
		New-Item -Path $build_log_dir -ItemType Directory
	}
	
	Write-host  ("Build dir : {0}" -f $build_dir)
	Write-host  ("Src dir : {0}" -f $src_dir)
	Write-host  ("Artifact dir : {0}" -f $build_artifact_dir)	
	Write-host  ("Log dir : {0}" -f $logfile)
	
    if (Test-Path $logfile)
    {
        Remove-Item $logfile
    }
	
    $path = [IO.Path]::GetFullPath($logfile)
    New-Item -ItemType file  $path
}

Kemudian skrip di atas disimpan di lokasi yang sama dengan folder src

Untuk contoh project Visual Basic 6-nya bisa Anda download di sini.

Konfigurasi Server CI (Continuous Integration)

Dipostingan kali ini saya sudah tidak lagi menjelaskan lagi secara rinci bagaimana membuat dan melakukan konfigurasi job/project jenkins karena sudah saya bahas dipostingan sebelumnya. Berikut langkah-langkahnya :

Langkah 1: Buat job/project baru, misal dengan nama northwind-vb6-build

Langkah 2: Setting repository git

Langkah 3: Setting Execute Windows batch command untuk menjalankan skrip build.ps1

Skrip di atas akan menjalankan file build.ps1 yang akan menghasilkan file exe dari project Visual Basic 6

Hasil compile Visual Basic 6 biasanya ukuran filenya belum dioptimasi, sehingga kita bisa menambahkan skrip untuk melakukan compress menggunakan tool UPX.

Lumayan hasil compressnya bisa mencapai 30%-an sendiri.

Kita juga bisa menambahkan skrip Inno Setup untuk membuat paket installer secara otomatis setelah proses build selesai, caranya gimana bisa Anda cek di sini.

Langkah 4: Terakhir tes build

Jika proses build selesai, kita tinggal cek hasilnya compilenya di folder job

Selamat MENCOBA :blush:

Comments