You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
216 lines
5.9 KiB
216 lines
5.9 KiB
![]()
2 years ago
|
---
|
||
|
sidebar_position: 2
|
||
|
sidebar_label: Create CI file
|
||
|
title: Create CI file
|
||
|
---
|
||
|
|
||
|
The CI of your project use Drone.
|
||
|
|
||
|
## Create initial CI file
|
||
|
|
||
|
At the root of your project create a new empty file with the name `.drone.yml`.
|
||
|
|
||
|
Fill the file with the initial data of a CI file:
|
||
|
|
||
|
```yml
|
||
|
kind: pipeline
|
||
|
type: docker
|
||
|
name: default
|
||
|
|
||
|
trigger:
|
||
|
event:
|
||
|
- push
|
||
|
|
||
|
steps:
|
||
|
```
|
||
|
|
||
|
This code permit:
|
||
|
* Define the type of the pipeline and is name.
|
||
|
* Launch the CI when a push is commit on the repository.
|
||
|
* Under `steps` the yaml file contains the list of jobs.
|
||
|
|
||
|
### Add the build job
|
||
|
|
||
|
In first for a CI is the build of your project, add the below code in the CI file.
|
||
|
|
||
|
```yml
|
||
|
- name: build
|
||
|
image: mcr.microsoft.com/dotnet/sdk:6.0
|
||
|
commands:
|
||
|
- cd Sources/
|
||
|
- dotnet restore MySolution.sln
|
||
|
- dotnet build MySolution.sln -c Release --no-restore
|
||
|
```
|
||
|
|
||
|
### Add the test job
|
||
|
|
||
|
The second step it is for test your project.
|
||
|
|
||
|
```yml
|
||
|
- name: tests
|
||
|
image: mcr.microsoft.com/dotnet/sdk:6.0
|
||
|
commands:
|
||
|
- cd Sources/
|
||
|
- dotnet restore MySolution.sln
|
||
|
- dotnet test MySolution.sln --no-restore
|
||
|
depends_on: [build]
|
||
|
```
|
||
|
|
||
|
### Add the analysis job
|
||
|
|
||
|
A CI is also present for analysis your code !
|
||
|
|
||
|
```yml
|
||
|
- name: code-analysis
|
||
|
image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dronesonarplugin-dotnet6
|
||
|
commands:
|
||
|
- cd Sources/
|
||
|
- dotnet restore MySolution.sln
|
||
|
- dotnet sonarscanner begin /k:$REPO_NAME /d:sonar.host.url=$$$${PLUGIN_SONAR_HOST} /d:sonar.coverageReportPaths="coveragereport/SonarQube.xml" /d:sonar.coverage.exclusions="Tests/**" /d:sonar.login=$$$${PLUGIN_SONAR_TOKEN}
|
||
|
- dotnet build MySolution.sln -c Release --no-restore
|
||
|
- dotnet test MySolution.sln --logger trx --no-restore /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --collect "XPlat Code Coverage"
|
||
|
- reportgenerator -reports:"**/coverage.cobertura.xml" -reporttypes:SonarQube -targetdir:"coveragereport"
|
||
|
- dotnet publish MySolution.sln -c Release --no-restore -o $CI_PROJECT_DIR/build/release
|
||
|
- dotnet sonarscanner end /d:sonar.login=$$$${PLUGIN_SONAR_TOKEN}
|
||
|
secrets: [ SECRET_SONAR_LOGIN ]
|
||
|
settings:
|
||
|
# accessible en ligne de commande par $${PLUGIN_SONAR_HOST}
|
||
|
sonar_host: https://codefirst.iut.uca.fr/sonar/
|
||
|
# accessible en ligne de commande par $${PLUGIN_SONAR_TOKEN}
|
||
|
sonar_token:
|
||
|
from_secret: SECRET_SONAR_LOGIN
|
||
|
depends_on: [tests]
|
||
|
```
|
||
|
|
||
|
### Add the documentation job
|
||
|
|
||
|
Your project containts also a documentation, create a job to generate this.
|
||
|
|
||
|
```yml
|
||
|
- name: generate-and-deploy-docs
|
||
|
image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-docdeployer
|
||
|
failure: ignore
|
||
|
volumes:
|
||
|
- name: docs
|
||
|
path: /docs
|
||
|
commands:
|
||
|
- /entrypoint.sh
|
||
|
when:
|
||
|
branch:
|
||
|
- master
|
||
|
depends_on: [ build ]
|
||
|
|
||
|
# The volumes declaration appear at the end of the file, after all steps
|
||
|
volumes:
|
||
|
- name: docs
|
||
|
temp: {}
|
||
|
```
|
||
|
|
||
|
## Add the CD job
|
||
|
|
||
|
For the CD we deploy a docker image of your project, add the job to build and deploy your docker image in a registry.
|
||
|
|
||
|
```yaml
|
||
|
- name: docker-build
|
||
|
image: plugins/docker
|
||
|
settings:
|
||
|
dockerfile: Sources/Dockerfile
|
||
|
context: .
|
||
|
registry: hub.codefirst.iut.uca.fr
|
||
|
repo: hub.codefirst.iut.uca.fr/my-group/my-application-client
|
||
|
username:
|
||
|
from_secret: SECRET_REGISTRY_USERNAME
|
||
|
password:
|
||
|
from_secret: SECRET_REGISTRY_PASSWORD
|
||
|
when:
|
||
|
branch:
|
||
|
- master
|
||
|
```
|
||
|
|
||
|
## Example of full file
|
||
|
|
||
|
Discover here a full file with all jobs.
|
||
|
|
||
|
```yaml
|
||
|
kind: pipeline
|
||
|
type: docker
|
||
|
name: default
|
||
|
|
||
|
trigger:
|
||
|
event:
|
||
|
- push
|
||
|
|
||
|
steps:
|
||
|
- name: build
|
||
|
image: mcr.microsoft.com/dotnet/sdk:6.0
|
||
|
commands:
|
||
|
- cd Sources/
|
||
|
- dotnet restore MySolution.sln
|
||
|
- dotnet build MySolution.sln -c Release --no-restore
|
||
|
|
||
|
- name: tests
|
||
|
image: mcr.microsoft.com/dotnet/sdk:6.0
|
||
|
commands:
|
||
|
- cd Sources/
|
||
|
- dotnet restore MySolution.sln
|
||
|
- dotnet test MySolution.sln --no-restore
|
||
|
depends_on: [build]
|
||
|
|
||
|
- name: code-analysis
|
||
|
image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dronesonarplugin-dotnet6
|
||
|
commands:
|
||
|
- cd Sources/
|
||
|
- dotnet restore MySolution.sln
|
||
|
- dotnet sonarscanner begin /k:$REPO_NAME /d:sonar.host.url=$$$${PLUGIN_SONAR_HOST} /d:sonar.coverageReportPaths="coveragereport/SonarQube.xml" /d:sonar.coverage.exclusions="Tests/**" /d:sonar.login=$$$${PLUGIN_SONAR_TOKEN}
|
||
|
- dotnet build MySolution.sln -c Release --no-restore
|
||
|
- dotnet test MySolution.sln --logger trx --no-restore /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --collect "XPlat Code Coverage"
|
||
|
- reportgenerator -reports:"**/coverage.cobertura.xml" -reporttypes:SonarQube -targetdir:"coveragereport"
|
||
|
- dotnet publish MySolution.sln -c Release --no-restore -o $CI_PROJECT_DIR/build/release
|
||
|
- dotnet sonarscanner end /d:sonar.login=$$$${PLUGIN_SONAR_TOKEN}
|
||
|
secrets: [ SECRET_SONAR_LOGIN ]
|
||
|
settings:
|
||
|
# accessible en ligne de commande par $${PLUGIN_SONAR_HOST}
|
||
|
sonar_host: https://codefirst.iut.uca.fr/sonar/
|
||
|
# accessible en ligne de commande par $${PLUGIN_SONAR_TOKEN}
|
||
|
sonar_token:
|
||
|
from_secret: SECRET_SONAR_LOGIN
|
||
|
depends_on: [tests]
|
||
|
|
||
|
- name: generate-and-deploy-docs
|
||
|
image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-docdeployer
|
||
|
failure: ignore
|
||
|
volumes:
|
||
|
- name: docs
|
||
|
path: /docs
|
||
|
commands:
|
||
|
- /entrypoint.sh
|
||
|
when:
|
||
|
branch:
|
||
|
- master
|
||
|
depends_on: [ build ]
|
||
|
|
||
|
- name: docker-build
|
||
|
image: plugins/docker
|
||
|
settings:
|
||
|
dockerfile: Sources/Dockerfile
|
||
|
context: .
|
||
|
registry: hub.codefirst.iut.uca.fr
|
||
|
repo: hub.codefirst.iut.uca.fr/my-group/my-application-client
|
||
|
username:
|
||
|
from_secret: SECRET_REGISTRY_USERNAME
|
||
|
password:
|
||
|
from_secret: SECRET_REGISTRY_PASSWORD
|
||
|
when:
|
||
|
branch:
|
||
|
- master
|
||
|
|
||
|
volumes:
|
||
|
- name: docs
|
||
|
temp: {}
|
||
|
```
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|