diff --git a/pkg/provider/gitlab.go b/pkg/provider/gitlab.go
index c5c808f04e9e5586f451714c0b03f8f9623b8d05..c1ef410d8b4486c2fa792634aa370e60a005d152 100644
--- a/pkg/provider/gitlab.go
+++ b/pkg/provider/gitlab.go
@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"os"
 	"regexp"
+	"strconv"
 
 	"github.com/Masterminds/semver/v3"
 	"github.com/go-semantic-release/semantic-release/v2/pkg/provider"
@@ -15,9 +16,10 @@ import (
 var PVERSION = "dev"
 
 type GitLabRepository struct {
-	projectID string
-	branch    string
-	client    *gitlab.Client
+	projectID       string
+	branch          string
+	stripVTagPrefix bool
+	client          *gitlab.Client
 }
 
 func (repo *GitLabRepository) Init(config map[string]string) error {
@@ -47,14 +49,18 @@ func (repo *GitLabRepository) Init(config map[string]string) error {
 		return fmt.Errorf("gitlab_projectid is required")
 	}
 
+	var err error
+	stripVTagPrefix := config["strip_v_tag_prefix"]
+	repo.stripVTagPrefix, err = strconv.ParseBool(stripVTagPrefix)
+
+	if stripVTagPrefix != "" && err != nil {
+		return fmt.Errorf("failed to set property strip_v_tag_prefix: %w", err)
+	}
+
 	repo.projectID = projectID
 	repo.branch = branch
 
-	var (
-		client *gitlab.Client
-		err    error
-	)
-
+	var client *gitlab.Client
 	if gitlabBaseUrl != "" {
 		client, err = gitlab.NewClient(token, gitlab.WithBaseURL(gitlabBaseUrl))
 	} else {
@@ -166,7 +172,12 @@ func (repo *GitLabRepository) GetReleases(rawRe string) ([]*semrel.Release, erro
 }
 
 func (repo *GitLabRepository) CreateRelease(release *provider.CreateReleaseConfig) error {
-	tag := fmt.Sprintf("v%s", release.NewVersion)
+	prefix := "v"
+	if repo.stripVTagPrefix {
+		prefix = ""
+	}
+
+	tag := prefix + release.NewVersion
 
 	// Gitlab does not have any notion of pre-releases
 	_, _, err := repo.client.Releases.CreateRelease(repo.projectID, &gitlab.CreateReleaseOptions{
diff --git a/pkg/provider/gitlab_test.go b/pkg/provider/gitlab_test.go
index 1381dd0728aa469b87dbce9c5f99812c8689c091..c5dd9d7284605fcbf5f302e7f5cb363c40c5b932 100644
--- a/pkg/provider/gitlab_test.go
+++ b/pkg/provider/gitlab_test.go
@@ -14,6 +14,11 @@ import (
 	"github.com/xanzy/go-gitlab"
 )
 
+var validTags = map[string]bool{
+	"v2.0.0": true,
+	"2.0.0":  true,
+}
+
 func TestNewGitlabRepository(t *testing.T) {
 	require := require.New(t)
 
@@ -31,9 +36,10 @@ func TestNewGitlabRepository(t *testing.T) {
 
 	repo = &GitLabRepository{}
 	err = repo.Init(map[string]string{
-		"gitlab_baseurl":   "https://mygitlab.com",
-		"token":            "token",
-		"gitlab_projectid": "1",
+		"gitlab_baseurl":     "https://mygitlab.com",
+		"token":              "token",
+		"gitlab_projectid":   "1",
+		"strip_v_tag_prefix": "true",
 	})
 	require.NoError(err)
 	require.Equal("https://mygitlab.com/api/v4/", repo.client.BaseURL().String(), "invalid custom instance initialization")
@@ -102,10 +108,12 @@ func GitlabHandler(w http.ResponseWriter, r *http.Request) {
 		var data map[string]string
 		json.NewDecoder(r.Body).Decode(&data)
 		r.Body.Close()
-		if data["tag_name"] != "v2.0.0" {
+
+		if _, ok := validTags[data["tag_name"]]; !ok {
 			http.Error(w, "invalid tag name", http.StatusBadRequest)
 			return
 		}
+
 		fmt.Fprint(w, "{}")
 		return
 	}
@@ -184,3 +192,22 @@ func TestGitlabCreateRelease(t *testing.T) {
 	err := repo.CreateRelease(&provider.CreateReleaseConfig{NewVersion: "2.0.0", SHA: "deadbeef"})
 	require.NoError(t, err)
 }
+
+func TestGitlabStripVTagRelease(t *testing.T) {
+	ts := httptest.NewServer(http.HandlerFunc(GitlabHandler))
+	defer ts.Close()
+
+	repo := &GitLabRepository{}
+	err := repo.Init(map[string]string{
+		"gitlab_baseurl":     ts.URL,
+		"token":              "gitlab-examples-ci",
+		"gitlab_branch":      "",
+		"gitlab_projectid":   strconv.Itoa(GITLAB_PROJECT_ID),
+		"strip_v_tag_prefix": "true",
+	})
+
+	require.NoError(t, err)
+
+	err = repo.CreateRelease(&provider.CreateReleaseConfig{NewVersion: "2.0.0", SHA: "deadbeef"})
+	require.NoError(t, err)
+}