> For the complete documentation index, see [llms.txt](https://blog.securescape.cc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://blog.securescape.cc/offensive-security/red-team/offensive-development/offensive-devops/gitlab/making-our-ci-cd-pipeline.md).

# Making our CI/CD Pipeline

### Config File

To create our pipeline, we must first create a `.gitlab-ci.yml` file and specify it to our project requirements (Place this in your project root)

[Templates](https://docs.gitlab.com/ee/ci/examples/)

[Syntax Reference](https://docs.gitlab.com/ee/ci/yaml/)

{% code title=".gitlab-ci.yml" %}

```yaml
image: golang:1.22  

stages:
  - test
  - build

build:
  stage: build
  script:
    - "go build -o calculator"
    - "./calculator"

test:
  stage: test
  script:
    - "go test"
```

{% endcode %}

Paste the code then push it to your repository

```bash
> git add .\.gitlab-ci.yml 
> git commit -m "Created GO Pipeline"
> git push
```

We can now view our pipeline from the repository, under **Build -> Pipeline -> Pipeline Number**

### **Viewing our deployed pipeline**

<figure><img src="https://1797977785-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjrIJ5xrJuOVgeeYdKNB5%2Fuploads%2FJhar8wpqgYJ3pSesV83D%2Fimage.png?alt=media&amp;token=1a2e6944-f93c-4450-986f-0d1bf550f5e8" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1797977785-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjrIJ5xrJuOVgeeYdKNB5%2Fuploads%2F7nlq3r5PNVCG39hPiuu5%2Fimage.png?alt=media&amp;token=fd232bab-0e92-4e3f-9b0a-d21f0a4d4db0" alt=""><figcaption><p>Successful Build</p></figcaption></figure>

{% hint style="warning" %}
**Issues Faced**

Spent the better part of an hour debugging and figured out that you need to create a runner as root cause of docker permissions. Alternatively, you can add yourself to the docker group - although it's easier just to use sudo
{% endhint %}

### Testing for Failures

Just like in [Simple Calculator Project](/offensive-security/red-team/offensive-development/offensive-devops/gitlab/simple-calculator-project.md), we can test for failures by changing the values slightly

First, we'll create a separate branch to mimic a real project, then change the test values from there

<figure><img src="https://1797977785-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjrIJ5xrJuOVgeeYdKNB5%2Fuploads%2FZoJSOkKFt3ayptk1JQfk%2Fimage.png?alt=media&amp;token=8d2d0258-1e29-438f-813e-ff3c047059b1" alt=""><figcaption><p>Creating a new branch with VS Code</p></figcaption></figure>

<figure><img src="https://1797977785-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjrIJ5xrJuOVgeeYdKNB5%2Fuploads%2FBRJdPjXXI1n2MaRg6pi7%2Fimage.png?alt=media&amp;token=04872a25-7a26-4e81-bbb9-81e960171372" alt=""><figcaption><p>Editing calculator_test.go</p></figcaption></figure>

Push your changes then wait for the pipeline to finish running

<figure><img src="https://1797977785-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjrIJ5xrJuOVgeeYdKNB5%2Fuploads%2FYxtscEBGzYnFx6TvaJFc%2Fimage.png?alt=media&amp;token=f6d2fffe-57d2-4b5c-a1aa-6972202dbf71" alt=""><figcaption><p>Failure Test</p></figcaption></figure>

We can now fix it back and create a merge request to main. Merge requests will trigger a pipeline job to check for errors before letting you merge (depending on your project settings)

<figure><img src="https://1797977785-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjrIJ5xrJuOVgeeYdKNB5%2Fuploads%2FS8gkXpRRm5dj42EyvWKN%2Fimage.png?alt=media&amp;token=f194b864-da2b-4662-b148-5492fb92f52d" alt=""><figcaption></figcaption></figure>
