Knowledgebase

Blog on software engineering
Knowledgebase

Knowledgebase

How to run GitLab in a container hosted by Docker Desktop for Windows

 

Resources

https://docs.microsoft.com/nl-nl/windows/wsl/install-win10#step-4—download-the-linux-kernel-update-package

 

Installing GitLab on WSL 2 container running on Docker Desktop for Windows

* Install Windows feature “Windows Subsystem for Linux” (Start > Turn Windows features on or off > check “Windows Subsystem for Linux”).

  • Install Windows feature “Virtual Machine Platform” (Start > Turn Windows features on or off > check “Virtual Machine Platform”).

  • Reboot system

  • Install the Linux kernel update package (https://docs.microsoft.com/nl-nl/windows/wsl/install-win10#step-4—download-the-linux-kernel-update-package)

  • Reboot system

  • Set WSL 2 as your default version (wsl –set-default-version 2)

  • Install your Linux distribution of choice (https://www.microsoft.com/nl-nl/p/ubuntu-2004-lts/9n6svws3rx71?rtc=1&activetab=pivot:overviewtab)

 

  • Install Docker desktop on Windows (https://docs.docker.com/desktop/windows/install/)

 

Follow the step found on https://docs.gitlab.com/ee/install/docker.html

 

Summary:

  • Add environment variable GITLAB_HOME = “C:\GitLab” on Windows

  • Add inbound Windows firewall rule “Port” > TCP – 8080 > Name = TCP – 8080 – GITLAB

  • Add inbound Windows firewall rule “Port” > TCP – 4430 > Name = TCP – 4430 – GITLAB

  • Add outbound Windows firewall rule “Port” > TCP – 8080 > Name = TCP – 8080 – GITLAB

  • Add outbound Windows firewall rule “Port” > TCP – 4430 > Name = TCP – 4430 – GITLAB

  • Install Ubuntu-20.04 from Microsoft Store

  • Enable integration with additional distros in Docker Desktop for Windows (Settings > Resources > WSL INTEGRATION > Check “Enable integration with my default WSL distro

    Check Ubuntu-20.04

  • Reboot system

  • Create docker compose file in ‘FolderContainingDockerComposeYml’:

 

web:

image: ‘gitlab/gitlab-ee:latest’

name: ‘gitlab’

restart: always

hostname: ‘dev-gitlab.nl’

ports:

- '8080:80'


- '4430:443'


- '22:22'

NOTE: On Windows don’t use GITLAB_OMNIBUS_CONFIG, else GitLab won’t work
 

GITLAB_OMNIBUS_CONFIG: |
external_url ‘dev-gitlab.nl’

volumes:

- '$GITLAB_HOME/config:/etc/gitlab'


- '$GITLAB_HOME/logs:/var/log/gitlab'


- '$GITLAB_HOME/data:/var/opt/gitlab'

NOTE: On Windows don’t use volumes, like described below. Let the Docker Desktop automatically create a volume, else GitLab won’t work.
 

volumes:

- '$GITLAB_HOME/config:/etc/gitlab'


- '$GITLAB_HOME/logs:/var/log/gitlab'


- '$GITLAB_HOME/data:/var/opt/gitlab'

 

Adjust host file (C:\Windows\System32\drivers\etc\hosts)

127.0.0.1 dev-gitlab.nl # GitLab in a container runnen on Docker desktop on Windows

 

 

On a PowerShell administrator prompt:

Set-Location “C:\FolderContainingDockerComposeYml”

docker-compose up -d

 

Note: you must wait at least 30 minutes before opening a browser on the host and visit the URL http://dev-gitlab.nl:8080

Or check the container output (when it stops outputing data for 2 minutes, you can try to access the gitlab url).

 

Log in with username ‘root’ and the password from the following command on a PowerShell commandline:

 

docker exec -it gitlab grep ‘Password:’ /etc/gitlab/initial_root_password

 

The password file will be automatically deleted in the first reconfigure run after 24 hours.

How to fix: MSBuild error MSB4226: The imported project was not found

 

When you get the MSBuild error:

“WebService.csproj” (Rebuild target) (1) ->

WebService.csproj(193,11): error MSB4226: The imported project

“C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets” was not found. Also, tried to find “WebApplications\Microsoft.WebApplication.targets” in the fallback search path(s) for $(VSToolsPath) – “C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v16.0” . These search paths are defined in “C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe.Config”. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk in one of the search paths.

 

Make sure you have installed the same components during the Visual Studio setup as during de MSBuild tools setup:

 

 

Both should match, if you want MSBUILD to be able to build the same project files as Visual Studio.

How to fix lag with Bluetooth Logitech MX Master 3 and DELL XPS 9710

 

When I did not use the MX Master 3 for a minute, the mouse would lag, when starting the mouse again on a DELL XPS 9710.

Fixed this by changing the following registry keys:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_8087&PID_0026\5&2816b067&0&10\Device Parameters]

“DeviceSelectiveSuspended”=dword:00000000

“SelectiveSuspendEnabled”=dword:00000000

<

p style=”margin-left: 54pt”>”SelectiveSuspendSupported”=dword:00000000

 

and then rebooting Windows 10.

Using ‘winston-daily-rotate-file in TypeScript

 

In TypeScript you need to import the library ‘winston-daily-rotate-file’ like, so:

 

import ‘winston-daily-rotate-file’

 

import { createLoggerformatLoggertransports } from ‘winston’;

import ‘winston-daily-rotate-file’;

 

let _winstonLoggerLogger;

 

function initialise() {

  _winstonLogger = createLogger({

    format: format.json(),

    transports: [

      new transports.Console({

        format: format.combine(format.colorize(), format.simple()),

      }),

    ],

  });

}

 

function addRotatingFileSystemLogging() {

  const options = {

    filename: ‘application-%DATE%.log’,

    datePattern: ‘YYYY-MM-DD’// Rotate every day

    zippedArchive: true,

    maxSize: ’20m’,

    maxFiles: ’31d’

  };

 

  const transport = new transports.DailyRotateFile(options);

  _winstonLogger.add(transport);

}

 

<

p style=”background: #1e1e1e”>
 

 

 

Fixing Microsoft store error 0x80d02017

After running Windows update and rebooting, the Windows “Mail and calendar” app disappeared.

So, I went to the Microsoft Store app to install the Windows “Mail and calendar” app, but after clicking on “Install” I got the error message “0x80d02017”.

To fix the error I had to disable IPV6 on my network connection as described here: https://www.winhelponline.com/blog/microsoft-store-error-0x80d02017-windows-10/

 

 

How to call an async service function from an ASP .NET razor *.cshtml master page in Full .NET Framework 4.7.2

 

If you need to call an async C# service method from an ASP .NET razor page, you can use the System.Threading.Tasks.Task.Run method.

Assuming we have a C# service class “MyService.cs” and this service contains an async method called “GetMyData”, then you can call it in a razor page like so:

 

@{

    var myService = new MyService();

var myData = System.Threading.Tasks.Task.Run(() => myService.GetMyData()).GetAwaiter().GetResult();

}

 

 

How to quickly debug an ASP .NET Core MVC Api Controller by using an Unit Test project

 

When you have an ASP .NET Core MVC api controller and you want to quickly debug the controller endpoint, you can use the code below.

Just make sure, you set the “Copy to Output Directory” to “Copy always” or “Copy if newer” on the appsettings.json file, inside the unit test project.

 

Code

 

using System;

using System.Net.Http;

using System.Threading.Tasks;

using Microsoft.AspNetCore.Hosting;

using Microsoft.AspNetCore.TestHost;

using Microsoft.Extensions.Configuration;

using Microsoft.VisualStudio.TestTools.UnitTesting;

using XmlInterface.WebApi;

 

namespace UnitTest

{

    [TestClass]

    public class SpikeUnitTest

    {

        /// <summary>

        /// https://geeklearning.io/a-different-approach-to-test-your-asp-net-core-application/

        /// </summary>

        [TestMethod]

        public async Task Run()

        {

            IConfigurationRoot configuration = new ConfigurationBuilder()

            .SetBasePath(AppContext.BaseDirectory)

            .AddJsonFile(“appsettings.json”)

            .Build();

 

            // UseConfiguration

            var webHostBuilder = new WebHostBuilder();

            webHostBuilder

                .UseConfiguration(configuration)

                .UseStartup<Startup>();

 

            var testServer = new TestServer(webHostBuilder);

            HttpClient httpClient = testServer.CreateClient();

            var response = await httpClient.GetAsync(“/api/Test”);

 

            Assert.IsTrue(true);

        }

    }

}

<

p style=”background: #1e1e1e”>
 

 

 

 

 

How to fix: Can’t bind to ‘data’ since it isn’t a known property of ‘markdown’

After an Angular 11 update, the code:

<markdown
[data]=“model.someText”></markdown>

 

would throw an exception “Can’t bind to ‘data’ since it isn’t a known property of ‘markdown'” only in production builds.

Fixed this by adding

@NgModule({
  ...
  imports: [
    ...
    ...

                MarkdownModule.forRoot(),
  ],
  ...
})
export class AppModule {}

 

 

In the AppModule en in de Module containing the component with the template using the “markdown” tag, added:

 

@NgModule({
  ...
  imports: [
    ...

                , MarkdownModule.forChild()
                
  ],
  ...
})
export class CoreModule { }