Skip to content

Scanning with the CodeLogic .NET Agent (Docker)

The CodeLogic .NET Agent for Docker provides an easy way to integrate CodeLogic scanning into your build process.

  1. Generate the Docker Image
  2. Run the Docker Image
  3. View Scan Results
  4. Using the Docker agent with Jenkins

Generate the Docker Image

  • Click Admin and then select the Installers tab.

DockerAgents.png

  • Locate the .NET Agent Docker Image tile and click Generate.
  • Enter your CodeLogic Server IP address or hostname.
  • Enter the directory path to be scanned in the field provided.
  • Click Next.
  • Copy your code snippet from the Success! window.

    Docker Options Examples

    • --pull always - ensures that you will always get the newest image
    • --env CODELOGIC_NETCAPE__URL="https://codelogic.com/codelogic/server/" - passes an environment variable representing the IP address or hostname of the CodeLogic Server
    • --env AGENT_UUID="1f5d0bbc-0924-4c6f-828c-532627c33178" - passes an environment variable for the agent UUID
    • --env AGENT_PASSWORD="AahlDFNbb0PyU378" - passes an environment variable for the agent password
    • --volume "C:\Users\User\Documents\yourAppsDlls:/scan" - mounts the directory C:\Users\User\Documents\yourAppsDlls onto the directory /scan so that it is accessible by the docker container
    • codelogic.com/codelogic_dotnet:latest - tells docker to download the .NET agent codelogic_dotnet:latest from the CodeLogic Server
    • See Docker Documentation for more docker options.

Run the Docker Image

Tip

You can copy and paste the code snippet directly into your Jenkins file.

analyze an application, omit the -d option if no database is utilized

analyze -a dynamicDemoApp --path /scan -d jdbc:postgresql://localhost:5432/sampledb

For more information, see Binary Scanning via Command Line (.NET).

View Scan Results

  • Select the Search tab.
  • Expand the application to view items and their dependencies.

CI/CD Scanning

Using the Docker agent with Jenkins

The CodeLogic .NET Agent for Docker can be used to scan artifacts in Jenkins pipelines.

Example:

stage('CodeLogic Scan EKS') {
    when {
        expression { BRANCH_NAME ==~ /(integration|v.*|feature\/.*)/ }
    }
    steps {
        catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
            // Publish CodeLogic Scan
            sh('''
            docker run --pull always --rm --interactive                                                  \
                 --env CODELOGIC_NETCAPE__URL="https://yourinstance.app.codelogic.com/codelogic/server/" \
                 --env "AGENT_UUID=${AGENT_UUID}"                                                        \
                 --env "AGENT_PASSWORD=${AGENT_PASSWORD}"                                                \
                 --volume "${WORKSPACE}/NetCape/installdir":/home/codelogic/analysis_target              \
                 yourinstance.app.codelogic.com/codelogic_dotnet:latest analyze                          \
                 --application "Your Application"                                                        \
                 --path /home/codelogic/analysis_target/                                                 \
                 --scan-space-name "Development"                                                         \
                 --filter Example                                                                        \
                 --method-filter Example                                                                 \
                 --recursive com.example                                                                 \
                 --rescan                                                                                \
                 --expunge-scan-sessions 
           ''')
        }
    }
}

Important

ScanSpaces should be unique to users or processes to avoid the inadvertent removal of previous scan sessions. The --expunge-scan-sessions option removes all previous scan sessions with the same fingerprint, even if they were created by another user.

The fingerprint is a collection of parameters specified when scanning. In the example below, the Java agent fingerprint is these parameters: --application, --method-filter, --path, --scan-space-name, and --type.

For example, a Continuous Integration (CI) pipeline scan, perhaps in a Jenkinsfile, is initiated as part of a build whenever there is a code merge. These scans are stored by the CodeLogic Server in the Development ScanSpace.

The command in the Jenkinsfile is: analyze --application neo4Cape-RobertPaulson --method-filter com.codelogic. --path /scan --type SCAN --scan-space-name Development.

A developer runs the same analysis using the CLI using CLI options that result in the same fingerprint but with the --expunge-scan-sessions option.

The developer's command is: analyze --application neo4Cape-RobertPaulson --method-filter com.codelogic. --path /scan --type SCAN --scan-space-name Development --expunge-scan-sessions.

Since the fingerprints match, all previous scans in the Development ScanSpace on the CodeLogic server are removed.

This can be avoided by each user using their own ScanSpaces. A ScanSpace is created when the --scan-space-name option is used, if it does not already exist.

Although a default ScanSpace is used if none is specified, always specifying a ScanSpace that is unique to a user is recommended.