# gitlab-ci

Published articles for gitlab-ci.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Announcing GitLab support for Appwrite Sites and Functions

DevFeed: [Announcing GitLab support for Appwrite Sites and Functions](<https://devfeed.tech/articles/announcing-gitlab-support-for-appwrite-sites-and-functions-16430.md>)

Original publisher: [Read original article](<https://appwrite.io/blog/post/announcing-gitlab-support>)

Author: Matej Bačo

Published: 2026-09-03T00:00:00Z

Content type: release

Language: en

Sources: [Appwrite Blog](<https://devfeed.tech/sources/appwrite-blog.md>)

Topics: [Appwrite](<https://devfeed.tech/topics/appwrite.md>), [GitLab](<https://devfeed.tech/topics/gitlab.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>)

Tags: [announcements](<https://devfeed.tech/tags/announcements.md>), [cli](<https://devfeed.tech/tags/cli.md>), [code](<https://devfeed.tech/tags/code.md>), [collaboration](<https://devfeed.tech/tags/collaboration.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [git](<https://devfeed.tech/tags/git.md>), [gitlab](<https://devfeed.tech/tags/gitlab.md>), [gitlab-ci](<https://devfeed.tech/tags/gitlab-ci.md>), [qr-code](<https://devfeed.tech/tags/qr-code.md>)

### AI overview

Appwrite announces GitLab support for Sites and Functions, allowing users to connect GitLab repositories and deploy directly, including repositories in GitLab groups.

### Source excerpt

Connect a GitLab account to Appwrite and deploy Sites and Functions directly from your GitLab repositories, including projects that live inside GitLab groups.

## Publishing Playwright HTML reports on GitLab Pages

DevFeed: [Publishing Playwright HTML reports on GitLab Pages](<https://devfeed.tech/articles/publishing-playwright-html-reports-on-gitlab-pages-22422.md>)

Original publisher: [Read original article](<https://www.tjmaher.com/2026/08/publishing-playwright-html-reports-on.html>)

Author: T.J. Maher (noreply@blogger.com)

Published: 2026-08-29T23:56:10Z

Content type: tutorial

Language: en

Sources: [T.J. Maher](<https://devfeed.tech/sources/t-j-maher.md>)

Topics: [GitLab](<https://devfeed.tech/topics/gitlab.md>), [Playwright](<https://devfeed.tech/topics/playwright.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [CI/CD Pipeline](<https://devfeed.tech/topics/ci-cd-pipeline.md>), [Publishing](<https://devfeed.tech/topics/publishing.md>)

Tags: [bun-create-playwright](<https://devfeed.tech/tags/bun-create-playwright.md>), [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [ci-cd-pipeline](<https://devfeed.tech/tags/ci-cd-pipeline.md>), [github-pages](<https://devfeed.tech/tags/github-pages.md>), [gitlab](<https://devfeed.tech/tags/gitlab.md>), [gitlab-ci](<https://devfeed.tech/tags/gitlab-ci.md>), [playwright](<https://devfeed.tech/tags/playwright.md>)

### AI overview

This tutorial explains how to add a deploy stage to a GitLab CI/CD pipeline for a Bun-based Playwright project. The stage publishes generated Playwright HTML reports, including screenshots and videos, to GitLab Pages so they can be viewed online.

### Source excerpt

We've added a lot to our demo project, bun--create-playwright. We've explored setting up a Playwright framework using bun, a new package manager bundled into Claude Code. We've added typechecking, and formatting and linting. We've set up a CI/ CD pipeline for our tests using GitLab, one with three stages: Quality: We check that the formatting, linting and typechecking is correct for any changes we attempt to push to the code base. Test: We run the smoke and then the regression tests to make sure that everything still works. Report: We bundle an archive of the Playwright generated HTML report, with screenshots and videos if things fail. For this post, we will add a new stage to this GitLab pipeline: Deploy: Where we will deploy the HTML report to GitLab Pages, so we can view it online. What is GitLab Pages? GitLab Pages is a built-in feature of GitLab that allows you to publish static websites directly from a repository in GitLab. Similar to GitHub Pages, it is commonly used to host project documentation, personal blogs, portfolios, or corporate landing pages for free. From the GitLab Docs / Pages: "To use GitLab Pages, you must create a project in GitLab to upload your website's files to. These projects can be either public, internal, or private. "By default, GitLab deploys your website from a specific folder called public in your repository. You can also set a custom folder to be deployed with Pages. When you create a new project in GitLab, a repository becomes available automatically. "To deploy your site, GitLab uses its built-in tool called GitLab CI/CD to build your site and publish it to the GitLab Pages server. The sequence of scripts that GitLab CI/CD runs to accomplish this task is created from a file named .gitlab-ci.yml, which you can create and modify. A user-defined job with pages: true property in the configuration file makes GitLab aware that you're deploying a GitLab Pages website. "You can either use the GitLab default domain for GitLab Pages websit

## How Developers Can Test Their Feature Branch Against Various Playwright Configurations Before Creating a Merge Request in GitLab CI/CD

DevFeed: [How Developers Can Test Their Feature Branch Against Various Playwright Configurations Before Creating a Merge Request in GitLab CI/CD](<https://devfeed.tech/articles/how-developers-can-test-their-feature-branch-against-various-playwright-configurations-before-creating-a-merge-request-in-gitlab-ci-cd-22417.md>)

Original publisher: [Read original article](<https://www.tjmaher.com/2026/08/how-developers-can-test-their-feature.html>)

Author: T.J. Maher (noreply@blogger.com)

Published: 2026-08-28T20:18:08Z

Content type: tutorial

Language: en

Sources: [T.J. Maher](<https://devfeed.tech/sources/t-j-maher.md>)

Topics: [GitLab](<https://devfeed.tech/topics/gitlab.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [Playwright](<https://devfeed.tech/topics/playwright.md>), [YAML](<https://devfeed.tech/topics/yaml.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [bun-create-playwright](<https://devfeed.tech/tags/bun-create-playwright.md>), [chromium](<https://devfeed.tech/tags/chromium.md>), [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [firefox](<https://devfeed.tech/tags/firefox.md>), [gitlab](<https://devfeed.tech/tags/gitlab.md>), [gitlab-ci](<https://devfeed.tech/tags/gitlab-ci.md>), [playwright](<https://devfeed.tech/tags/playwright.md>), [tests](<https://devfeed.tech/tags/tests.md>), [yaml](<https://devfeed.tech/tags/yaml.md>)

### AI overview

This tutorial shows how to configure a GitLab CI/CD pipeline so developers can test a feature branch before creating a merge request. It uses spec inputs in a YAML configuration to let users choose the branch, Playwright test suite, and browser, including Chromium, Firefox, WebKit, or all browsers.

### Source excerpt

Developers need the option to test out their feature branch before merging it into main. In the last section, we set up a GitLab CI/CD Pipeline in our bun-create-playwright project to check every GitLab Merge Request. Now, we will be giving developers option to create a new pipeline where they can choose: Which feature branch to test against. Which test suite to execute (LoginPage tests? Secure Area? Or all of them?) Which Playwright browser to use: Chromium, Firefox, WebKit, or all. All these features can be set up using our .gitlab-ci.yaml file! Go to to bun-create-playwright, view the Pipelines section, and select the New Pipeline button. Run a New Bun-Create-Playwright Pipeline If you go to the Run new pipeline page at https://gitlab.com/tjmaher/bun-create-playwright/-/pipelines/new you can see the following default values I've set: https://gitlab.com/tjmaher/bun-create-playwright/-/pipelines/new By default: Branch name is "main", TEST_SUITE is "all", BROWSER is "all". ... But all these values can be set, with the developer choosing the options laid out in the .gitlab-ci.yaml file. Collect User Data With Spec Inputs We are going to be adding to the GitLab Pipeline we built in our last post Setting up a CI/ CD pipeline with GitLab: Quality, Test and Report. First, we are going to add a "spec" section to the header of the YAML file to define the behavior of a pipeline, and within that spec header, we will ask the person who triggered a new pipeline to set user defined inputs for the pipeline. spec: inputs: browser: description: "Browser project to run against." default: "all" options: ["all", "chromium", "firefox", "webkit"] suite: description: "Select full regression suite, or a single spec" default: "all" options: ["all", "login.spec.ts", "secure-area.spec.ts"] This is where we declare the "browser" and "suite" variables that appear when a user creates a new pipeline. We've given them a choice to run their feature branch code against: Browser: All, Chromium, Fir

## Best GitLab Alternatives in 2026

DevFeed: [Best GitLab Alternatives in 2026](<https://devfeed.tech/articles/best-gitlab-alternatives-in-2026-20419.md>)

Original publisher: [Read original article](<https://semaphore.io/blog/best-gitlab-alternatives-in-2026>)

Author: Pete Miloravac

Published: 2026-07-30T12:04:04Z

Content type: comparison

Language: en

Sources: [Semaphore Engineering](<https://devfeed.tech/sources/semaphore-engineering.md>)

Topics: [GitLab](<https://devfeed.tech/topics/gitlab.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [DevSecOps](<https://devfeed.tech/topics/devsecops.md>), [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [alternatives](<https://devfeed.tech/tags/alternatives.md>), [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [circleci](<https://devfeed.tech/tags/circleci.md>), [compare](<https://devfeed.tech/tags/compare.md>), [cost](<https://devfeed.tech/tags/cost.md>), [devsecops](<https://devfeed.tech/tags/devsecops.md>), [enterprise-deployment](<https://devfeed.tech/tags/enterprise-deployment.md>), [evaluation](<https://devfeed.tech/tags/evaluation.md>), [github](<https://devfeed.tech/tags/github.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [gitlab](<https://devfeed.tech/tags/gitlab.md>), [gitlab-ci](<https://devfeed.tech/tags/gitlab-ci.md>), [self-hosted](<https://devfeed.tech/tags/self-hosted.md>)

### AI overview

A comparison of Semaphore, GitHub Actions, CircleCI, and Buildkite as alternatives to GitLab for CI/CD-focused decisions. It examines execution, deployment, pricing, support, and operating models while explaining when retaining GitLab repositories may be more practical than replacing GitLab entirely.

### Source excerpt

GitLab is a capable, integrated DevSecOps platform--but it is not the only sensible way to run CI/CD. Teams comparing GitLab alternatives are often trying to improve pipeline execution, simplify operations, get clearer support and cost options, or adopt a CI/CD tool that fits their existing source-control strategy. That does not automatically mean moving repositories out [...] The post Best GitLab Alternatives in 2026 appeared first on Semaphore.

## Best Bitbucket Alternatives in 2026

DevFeed: [Best Bitbucket Alternatives in 2026](<https://devfeed.tech/articles/best-bitbucket-alternatives-in-2026-20415.md>)

Original publisher: [Read original article](<https://semaphore.io/blog/best-bitbucket-alternatives-in-2026>)

Author: Pete Miloravac

Published: 2026-07-29T11:54:28Z

Content type: comparison

Language: en

Sources: [Semaphore Engineering](<https://devfeed.tech/sources/semaphore-engineering.md>)

Topics: [bitbucket](<https://devfeed.tech/topics/bitbucket.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>), [GitLab](<https://devfeed.tech/topics/gitlab.md>), [Self-hosted](<https://devfeed.tech/topics/self-hosted.md>), [Cloud](<https://devfeed.tech/topics/cloud.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>), [DevSecOps](<https://devfeed.tech/topics/devsecops.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [alternatives](<https://devfeed.tech/tags/alternatives.md>), [bitbucket](<https://devfeed.tech/tags/bitbucket.md>), [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [circleci](<https://devfeed.tech/tags/circleci.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [compare](<https://devfeed.tech/tags/compare.md>), [github](<https://devfeed.tech/tags/github.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [gitlab](<https://devfeed.tech/tags/gitlab.md>), [gitlab-ci](<https://devfeed.tech/tags/gitlab-ci.md>), [linux](<https://devfeed.tech/tags/linux.md>), [macos](<https://devfeed.tech/tags/macos.md>), [pipelines](<https://devfeed.tech/tags/pipelines.md>), [self-hosted](<https://devfeed.tech/tags/self-hosted.md>)

### AI overview

This comparison guide examines Bitbucket Pipelines and four alternatives--Semaphore, GitHub Actions, GitLab CI/CD, and CircleCI--to help teams choose a CI/CD platform based on source-control ecosystem, visibility, deployment control, hosting model, and operational requirements.

### Source excerpt

Bitbucket Pipelines is a logical starting point for teams already using Bitbucket Cloud. It is built into the source-control experience, configured in a bitbucket-pipelines.yml file, and offers both Atlassian-hosted execution and self-hosted runners. But convenience at the repository level is not always the same thing as the best long-term CI/CD operating model. Teams evaluating Bitbucket [...] The post Best Bitbucket Alternatives in 2026 appeared first on Semaphore.

## Nix flake check + JUnit = Junix

DevFeed: [Nix flake check + JUnit = Junix](<https://devfeed.tech/articles/nix-flake-check-junit-junix-31356.md>)

Original publisher: [Read original article](<https://discourse.nixos.org/t/nix-flake-check-junit-junix/79124>)

Author: Yajo

Published: 2026-07-23T12:35:46Z

Content type: release

Language: en

Sources: [Announcements - NixOS Discourse](<https://devfeed.tech/sources/announcements-nixos-discourse.md>)

Topics: [Nix](<https://devfeed.tech/topics/nix.md>), [ci](<https://devfeed.tech/topics/ci.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>), [GitLab](<https://devfeed.tech/topics/gitlab.md>), [Jenkins](<https://devfeed.tech/topics/jenkins.md>)

Tags: [announcements](<https://devfeed.tech/tags/announcements.md>), [build](<https://devfeed.tech/tags/build.md>), [ci](<https://devfeed.tech/tags/ci.md>), [github](<https://devfeed.tech/tags/github.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [gitlab-ci](<https://devfeed.tech/tags/gitlab-ci.md>), [jenkins](<https://devfeed.tech/tags/jenkins.md>)

### AI overview

Junix converts Nix JSON output into standard JUnit XML reports, allowing Nix builds and checks to integrate with JUnit-compatible CI systems such as GitLab CI, Jenkins, and GitHub Actions. It can evaluate system checks, repeat failed evaluations for full tracebacks, build local checks, include logs, and print a human-readable summary.

### Source excerpt

Hi all! I'd like to share Junix, a small tool that converts Nix @nix JSON output into standard JUnit XML so you can integrate Nix builds with any JUnit-compatible CI (GitLab CI, Jenkins, GitHub Actions, etc.). Try it: cd your/flake nix run gitlab:moduon/junix check -o result.xml This will: Eval all systems checks in one shot If any eval fails, repeat that check's eval to get full traceback Build local system checks Write the JUnit XML report in result.xml with check build logs and eval failure logs, if any Print a colorful human-readable summary 9 posts - 6 participants Read full topic

## How Indeed Replaced Its CI Platform with Gitlab CI

DevFeed: [How Indeed Replaced Its CI Platform with Gitlab CI](<https://devfeed.tech/articles/how-indeed-replaced-its-ci-platform-with-gitlab-ci-29990.md>)

Original publisher: [Read original article](<https://engineering.indeedblog.com/blog/2024/08/indeed-gitlab-ci-migration/>)

Author: Carl Myers

Published: 2024-08-06T15:03:51Z

Content type: article

Language: en

Sources: [Indeed](<https://devfeed.tech/sources/indeed.md>)

Topics: [GitLab](<https://devfeed.tech/topics/gitlab.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [Jenkins](<https://devfeed.tech/topics/jenkins.md>), [Kubernetes](<https://devfeed.tech/topics/kubernetes.md>), [Amazon EC2](<https://devfeed.tech/topics/amazon-ec2.md>), [Amazon Web Services](<https://devfeed.tech/topics/aws.md>)

Tags: [aws](<https://devfeed.tech/tags/aws.md>), [ci](<https://devfeed.tech/tags/ci.md>), [ec2](<https://devfeed.tech/tags/ec2.md>), [gitlab](<https://devfeed.tech/tags/gitlab.md>), [gitlab-ci](<https://devfeed.tech/tags/gitlab-ci.md>), [jenkins](<https://devfeed.tech/tags/jenkins.md>), [kubernetes](<https://devfeed.tech/tags/kubernetes.md>), [unsorted](<https://devfeed.tech/tags/unsorted.md>)

### AI overview

Indeed's engineering platform evolved from Hudson to Jenkins and later encountered architectural and scaling limitations as the company grew and adopted AWS EC2 and Kubernetes. The article discusses replacing that CI platform with GitLab CI.

### Source excerpt

Here at Indeed, our mission is to help people get jobs. Indeed is the #1 job site in the world with over 580M+ Job Seeker Profiles. For Indeed's Engineering Platform teams, we have a slightly different motto: "We help people to help people get jobs". As part of a data-driven engineering culture that has spent [...]

## Connect to Open VPN during Gitlab Pipeline

DevFeed: [Connect to Open VPN during Gitlab Pipeline](<https://devfeed.tech/articles/connect-to-open-vpn-during-gitlab-pipeline-25555.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2021/gitlab-pipeline-vpn/>)

Author: Marco Gomiero

Published: 2021-06-28T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [GitLab](<https://devfeed.tech/topics/gitlab.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [Virtual Private Network](<https://devfeed.tech/topics/vpn.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [gitlab](<https://devfeed.tech/tags/gitlab.md>), [gitlab-ci](<https://devfeed.tech/tags/gitlab-ci.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [secrets](<https://devfeed.tech/tags/secrets.md>), [server](<https://devfeed.tech/tags/server.md>), [vpn](<https://devfeed.tech/tags/vpn.md>)

### AI overview

This tutorial explains how to connect to an OpenVPN service from a GitLab CI/CD pipeline. It describes configuring secret variables, installing dependencies, establishing the VPN connection, checking connectivity, and allowing the pipeline to download dependencies from a private Maven repository behind the VPN.

### Source excerpt

Gitlab CI/CD offers the possibility to create a pipeline, which runs when something changes in the repository. A pipeline consists of one or more stages that run in order and in these stages, for example, it is possible to build the project, run the tests, create the artifacts, etc. For more information about Gitlab CI/CD, I suggest you look over the documentation. These out-of-the-box solutions really simplify the work to be done to have a CI up and running. For example, this is the configuration file (a file called .gitlab-ci.yml placed at the repository's root) needed for running all the tests of a Kotlin project.

## Теперь YouTrack интегрируется с GitLab CI/CD

DevFeed: [Теперь YouTrack интегрируется с GitLab CI/CD](<https://devfeed.tech/articles/youtrack-gitlab-ci-cd-23914.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/JetBrains/articles/559812/>)

Author: ana-bartasheva (JetBrains)

Published: 2021-05-28T10:41:33Z

Content type: release

Language: ru

Sources: [JetBrains RU](<https://devfeed.tech/sources/jetbrains-ru.md>)

Topics: [CI/CD](<https://devfeed.tech/topics/cicd.md>), [GitLab](<https://devfeed.tech/topics/gitlab.md>), [teamcity](<https://devfeed.tech/topics/teamcity.md>), [Jenkins](<https://devfeed.tech/topics/jenkins.md>)

Tags: [ci](<https://devfeed.tech/tags/ci.md>), [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [develop](<https://devfeed.tech/tags/develop.md>), [gitlab](<https://devfeed.tech/tags/gitlab.md>), [gitlab-ci](<https://devfeed.tech/tags/gitlab-ci.md>), [merge](<https://devfeed.tech/tags/merge.md>), [project-management](<https://devfeed.tech/tags/project-management.md>), [youtrack](<https://devfeed.tech/tags/youtrack.md>), [youtube](<https://devfeed.tech/tags/youtube.md>)

### AI overview

JetBrains YouTrack's release adds GitLab CI/CD integration, allowing tasks to be updated automatically based on GitLab pipeline results. The release also introduces similar-task detection in YouTrack Lite and a text editor improvement in YouTrack Classic.

### Source excerpt

Привет, Хабр! На связи команда JetBrains YouTrack, и у нас для вас новый релиз! Мы дополнили интеграцию с GitLab -- теперь YouTrack не только отслеживает коммиты и merge-реквесты, но и поддерживает интеграцию с GitLab CI/CD. А это значит, что задачи в YouTrack смогут обновляться автоматически -- по результатам автоматизированных сборок в GitLab CI/CD. Также мы дополнили релиз интересными улучшениями для работы с задачами. За подробностями добро пожаловать под кат! Читать далее

## Starting a TypeScript Project in 2021

DevFeed: [Starting a TypeScript Project in 2021](<https://devfeed.tech/articles/starting-a-typescript-project-in-2021-31856.md>)

Original publisher: [Read original article](<https://www.metachris.dev/2021/03/bootstrapping-a-typescript-node.js-project/>)

Author: Chris Hager

Published: 2021-03-24T00:00:00Z

Content type: tutorial

Language: en

Sources: [Chris Hager](<https://devfeed.tech/sources/chris-hager.md>)

Topics: [TypeScript](<https://devfeed.tech/topics/typescript.md>), [Node.js](<https://devfeed.tech/topics/node-js.md>), [Jest](<https://devfeed.tech/topics/jest.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [npm](<https://devfeed.tech/topics/npm.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>)

Tags: [boilerplate](<https://devfeed.tech/tags/boilerplate.md>), [browser](<https://devfeed.tech/tags/browser.md>), [deprecated](<https://devfeed.tech/tags/deprecated.md>), [es6](<https://devfeed.tech/tags/es6.md>), [esbuild](<https://devfeed.tech/tags/esbuild.md>), [eslint](<https://devfeed.tech/tags/eslint.md>), [github](<https://devfeed.tech/tags/github.md>), [gitlab-ci](<https://devfeed.tech/tags/gitlab-ci.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [jest](<https://devfeed.tech/tags/jest.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [npm](<https://devfeed.tech/tags/npm.md>), [project](<https://devfeed.tech/tags/project.md>), [setup](<https://devfeed.tech/tags/setup.md>), [template](<https://devfeed.tech/tags/template.md>), [typescript](<https://devfeed.tech/tags/typescript.md>)

### AI overview

A practical guide to starting a TypeScript project with modern tooling, covering project setup, linting, Jest testing, esbuild bundling, npm publishing, continuous integration, and automatic API documentation.

### Source excerpt

Moved to /2021/04/starting-a-typescript-project-in-2021/

## Tutorial: Self-hosted CI/CD deployment in a homelab with GitLab CI, Docker, and Kubernetes

DevFeed: [Tutorial: Self-hosted CI/CD deployment in a homelab with GitLab CI, Docker, and Kubernetes](<https://devfeed.tech/articles/build-deploy-your-own-code-in-your-homelab-10662.md>)

Original publisher: [Read original article](<https://technotim.com/posts/self-hosted-devops-stack/>)

Author: Techno Tim

Published: 2020-09-12T14:00:00Z

Content type: tutorial

Language: en

Sources: [Techno Tim](<https://devfeed.tech/sources/techno-tim.md>)

Topics: [CI/CD](<https://devfeed.tech/topics/cicd.md>), [GitLab](<https://devfeed.tech/topics/gitlab.md>), [Homelab](<https://devfeed.tech/topics/homelab.md>), [Docker](<https://devfeed.tech/topics/docker.md>), [Kubernetes](<https://devfeed.tech/topics/kubernetes.md>), [Docker Image](<https://devfeed.tech/topics/docker-image.md>), [kubectl](<https://devfeed.tech/topics/kubectl.md>), [rancher](<https://devfeed.tech/topics/rancher.md>), [Dockerfile](<https://devfeed.tech/topics/dockerfile.md>), [nginx](<https://devfeed.tech/topics/nginx.md>), [React](<https://devfeed.tech/topics/react.md>), [Windows](<https://devfeed.tech/topics/windows.md>)

Tags: [continuous-delivery](<https://devfeed.tech/tags/continuous-delivery.md>), [continuous-integration](<https://devfeed.tech/tags/continuous-integration.md>), [developer](<https://devfeed.tech/tags/developer.md>), [docker](<https://devfeed.tech/tags/docker.md>), [docker-container](<https://devfeed.tech/tags/docker-container.md>), [docker-image](<https://devfeed.tech/tags/docker-image.md>), [gitlab-ci](<https://devfeed.tech/tags/gitlab-ci.md>), [guide](<https://devfeed.tech/tags/guide.md>), [homelab](<https://devfeed.tech/tags/homelab.md>), [kubectl](<https://devfeed.tech/tags/kubectl.md>), [kubernetes](<https://devfeed.tech/tags/kubernetes.md>), [nginx](<https://devfeed.tech/tags/nginx.md>), [rancher](<https://devfeed.tech/tags/rancher.md>), [react](<https://devfeed.tech/tags/react.md>), [registry](<https://devfeed.tech/tags/registry.md>), [self-hosted](<https://devfeed.tech/tags/self-hosted.md>), [testing](<https://devfeed.tech/tags/testing.md>), [unit-tests](<https://devfeed.tech/tags/unit-tests.md>), [windows](<https://devfeed.tech/tags/windows.md>), [wsl](<https://devfeed.tech/tags/wsl.md>)

### AI overview

This tutorial explains how to set up a self-hosted development pipeline in a homelab. It covers repository setup, unit testing with a GitLab CI runner, building and publishing a Docker image to a container registry, and deploying the container to a self-hosted Kubernetes cluster with kubectl.

### Source excerpt

So you're a software engineer or a developer who wants to self-host your own code in your own homelab? Well this is the tutorial for you! In this step-by-step guide we'll walk through setting up a repo, building and testing our own code (with unit tests) in a self-hosted Gitlab CI runner in our CI pipeline, then we'll build a Docker image and push it up to a container registry, then we'll use...

## Setting up GitLab CI for Android Projects

DevFeed: [Setting up GitLab CI for Android Projects](<https://devfeed.tech/articles/setting-up-gitlab-ci-for-android-projects-25867.md>)

Original publisher: [Read original article](<http://lordraydenmk.github.io//2017/setting-up-gitlab-ci-for-android/>)

Author: Stojan Anastasov

Published: 2017-12-03T00:00:00Z

Content type: tutorial

Language: en

Sources: [Stojan Anastasov's blog](<https://devfeed.tech/sources/stojan-anastasov-s-blog.md>)

Topics: [GitLab](<https://devfeed.tech/topics/gitlab.md>), [Android](<https://devfeed.tech/topics/android.md>), [ci](<https://devfeed.tech/topics/ci.md>), [SDK](<https://devfeed.tech/topics/sdk.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Testing](<https://devfeed.tech/topics/testing.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-testing](<https://devfeed.tech/tags/android-testing.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [continuous-integration](<https://devfeed.tech/tags/continuous-integration.md>), [gitlab](<https://devfeed.tech/tags/gitlab.md>), [gitlab-ci](<https://devfeed.tech/tags/gitlab-ci.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>)

### AI overview

A tutorial for configuring GitLab CI for Android projects. It explains installing Android command-line tools and SDK packages, transferring accepted licenses to a CI server, and handling emulator limitations when running functional tests.

### Source excerpt

My first experience with continuous integration was using Bitbucket in combination with Jenkins. I was pretty happy with my setup. Jenkins would run on every commit making sure my code compiles, run android lint and run my unit tests. I also set up continuous deployment using Fabric. Now, at work, we use GitLab as a code repository. GitLab also offers continuous integration. When we decided to start using continuous integration at work we decided to give GitLab a chance. It was already integrated with GitLab and to use it we just needed to install a runner. Using CI with GitLab is simple, after you install a runner you need to add a .gitlab-ci.yml file at the root of the repository. GitLab even offers template .gitlab-ci.yml files for various languages and frameworks. The android template is based on this blog post from 2016. It is a great guide but unfortunately today it doesn't work. Google introduced a few changes in the command line tools. Installing Android SDK To install the Android SDK on a CI we need to install the command line tools (scroll to the bottom to Get just the command line tools). The command line tools include the sdkmanager - a command line tool that allows you to view, install, update, and uninstall packages for the Android SDK. So instead of - wget --quiet --output-document=android-sdk.tgz https://dl.google.com/android/android-sdk_r${ANDROID_SDK_TOOLS}-linux.tgz - tar --extract --gzip --file=android-sdk.tgz we can use - wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip - unzip -q android-sdk.zip -d android-sdk-linux to download and install the Android SDK tools. There is also an improvement in accepting licenses for the Android SDK. After you accept the licenses on your development machine the tools will generate a licenses folder in the Android SDK root directory. You can transfer the licenses from your development machine to your CI server. To accept the licenses we can use: -