--- 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: {} ```