# scaffolder-backend-module-gitlab Welcome to the Gitlab Module for Scaffolder. Here you can find all Gitlab related features to improve your scaffolder: ## Getting started ## From your Backstage root directory ```bash # From your Backstage root directory yarn --cwd packages/backend add @backstage/plugin-scaffolder-backend-module-gitlab ``` Then ensure that both the scaffolder and this module are added to your backend: ```typescript // In packages/backend/src/index.ts const backend = createBackend(); // ... backend.add(import('@backstage/plugin-scaffolder-backend')); backend.add(import('@backstage/plugin-scaffolder-backend-module-gitlab')); ``` After that you can use the actions in your template: ```yaml apiVersion: scaffolder.backstage.io/v1beta3 kind: Template metadata: name: gitlab-demo title: Gitlab DEMO description: Scaffolder Gitlab Demo spec: owner: backstage/techdocs-core type: service parameters: - title: Fill in some steps required: - name properties: name: title: Name type: string description: Unique name of the component ui:autofocus: true ui:options: rows: 5 - title: Choose a location required: - repoUrl properties: repoUrl: title: Repository Location type: string ui:field: RepoUrlPicker ui:options: allowedHosts: - gitlab.com steps: - id: fetch name: Fetch action: fetch:template input: url: https://github.com/TEMPLATE values: name: ${{ parameters.name }} - id: createGitlabGroup name: Ensure Gitlab group exists action: gitlab:group:ensureExists input: repoUrl: ${{ parameters.repoUrl }} path: - path - to - group - id: publish name: Publish action: publish:gitlab input: description: This is ${{ parameters.name }} repoUrl: ${{ parameters.repoUrl }}?owner=${{ steps.createGitlabGroup.output.groupId }} sourcePath: pimcore defaultBranch: main - id: gitlab-deploy-token name: Create Deploy Token action: gitlab:projectDeployToken:create input: repoUrl: ${{ parameters.repoUrl }} projectId: "${{ steps['publish'].output.projectId }}" name: ${{ parameters.name }}-secret username: ${{ parameters.name }}-secret scopes: ['read_registry'] - id: gitlab-access-token name: Gitlab Project Access Token action: gitlab:projectAccessToken:create input: repoUrl: ${{ parameters.repoUrl }} projectId: "${{ steps['publish-manifest'].output.projectId }}" name: ${{ parameters.name }}-access-token accessLevel: 40 scopes: ['read_repository', 'write_repository'] - id: gitlab-project-variable name: Gitlab Project Variable action: gitlab:projectVariable:create input: repoUrl: ${{ parameters.repoUrl }} projectId: "${{ steps['publish'].output.projectId }}" key: 'VARIABLE_NAME' value: "${{ steps['gitlab-access-token'].output.access_token }}" variableType: 'env_var' masked: true maskedAndHidden: false variableProtected: false raw: false environmentScope: '*' - id: register name: Register action: catalog:register input: repoContentsUrl: ${{ steps['publish'].output.repoContentsUrl }} catalogInfoPath: '/catalog-info.yaml' - id: gitlabIssue name: Issues action: gitlab:issues:create input: repoUrl: ${{ parameters.repoUrl }} token: ${{ secrets.USER_OAUTH_TOKEN }} projectId: 1111111 title: Test Issue assignees: - 2222222 description: This is the description of the issue confidential: true createdAt: 2022-09-27 18:00:00.000 dueDate: 2024-09-28 12:00:00.000 epicId: 3333333 labels: phase1:label1,phase2:label2 output: links: - title: Repository url: ${{ steps['publish'].output.remoteUrl }} - title: Link to new issue url: ${{ steps['gitlabIssue'].output.issueUrl }} ```