Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixing issue in Dynamic Data c++ examples #638

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Changed the find_package to include it if it hasn't been included before

7544b03
Select commit
Loading
Failed to load commit list.
Open

Fixing issue in Dynamic Data c++ examples #638

Changed the find_package to include it if it hasn't been included before
7544b03
Select commit
Loading
Failed to load commit list.
RTI Jenkins CI / Download Packages failed Feb 16, 2024 in 6m 41s

Failed

⚠️ Failed downloading RTI Connext DDS libraries.

Details

This build is being executed on an internal Jenkins, only RTI employees can access the build logs. To give information to external users, we have configured the status checks.

Pipeline description

The pipeline is defined here and the purpose of this pipeline is to build the examples using the last staging packages of RTI Connext® DDS and to analyze the build using analyze-build from clang-tools.

Environment details

Option Setting
RTI Connext® DDS Version 7.3.0
System Linux
Machine type x86_64
OS release 4.18.0-499.el8.x86_64
GCC Version 9.4.0
CLANG Version 10.0.0
Dockerfile

# ------------------------------------------------------------------------------
# (c) 2021 Copyright, Real-Time Innovations, Inc.  All rights reserved.
# RTI grants Licensee a license to use, modify, compile, and create derivative
# works of the Software.  Licensee has the right to distribute object form only
# for use with RTI products.  The Software is provided "as is", with no warranty
# of any type, including any warranty for fitness for any purpose. RTI is under
# no obligation to maintain or support the Software.  RTI shall not be liable 
# for any incidental or consequential damages arising out of the use or
# inability to use the software.
# ------------------------------------------------------------------------------

FROM ubuntu:20.04

ENV CONNEXTDDS_ARCH="x64Linux4gcc7.3.0"
ENV DEBIAN_FRONTEND="noninteractive"

RUN apt update && apt install -y \
    gcc \
    g++ \
    clang \
    libssl-dev \
    make \
    cmake \
    python3 \
    clang-tools-10 \
    && rm -rf /var/lib/apt/lists/*

ENV PATH=/usr/share/clang/scan-build-py-10/bin:${PATH}

USER jenkins

Jenkinsfile

/*
 * (c) Copyright, Real-Time Innovations, 2021.  All rights reserved.
 * RTI grants Licensee a license to use, modify, compile, and create derivative
 * works of the software solely for use with RTI Connext DDS. Licensee may
 * redistribute copies of the software provided that all such copies are subject
 * to this license. The software is provided "as is", with no warranty of any
 * type, including any warranty for fitness for any purpose. RTI is under no
 * obligation to maintain or support the software. RTI shall not be liable for
 * any incidental or consequential damages arising out of the use or inability
 * to use the software.
 */
DETAILS_URL = "https://community.rti.com/"

def publishInProgressCheck(Map config) {
    publishChecks(
        name: config.get('name', "${STAGE_NAME}"),
        title: config.title,
        summary: config.summary,
        status: 'IN_PROGRESS',
        detailsURL: DETAILS_URL,
    )
}

def publishPassedCheck(Map config) {
    publishChecks(
        name: config.get('name', "${STAGE_NAME}"),
        title: 'Passed',
        summary: config.summary,
        status: 'COMPLETED',
        conclusion: 'SUCCESS',
        text: readFile(env.RTI_JENKINS_OUTPUT_FILE),
        detailsURL: DETAILS_URL,
    )
}

def publishFailedCheck(Map config) {
    publishChecks(
        name: config.get('name', "${STAGE_NAME}"),
        title: 'Failed',
        summary: config.summary,
        status: 'COMPLETED',
        conclusion: 'FAILURE',
        text: readFile(env.RTI_JENKINS_OUTPUT_FILE),
        detailsURL: DETAILS_URL,
    )
}

def publishAbortedCheck(Map config) {
    publishChecks(
        name: config.get('name', "${STAGE_NAME}"),
        title: 'Aborted',
        summary: config.summary,
        status: 'COMPLETED',
        conclusion: 'CANCELED',
        text: readFile(env.RTI_JENKINS_OUTPUT_FILE),
        detailsURL: DETAILS_URL,
    )
}

def runBuildStage(String buildMode, String linkMode) {
    def checkName = "Build ${buildMode}/${linkMode}"
    publishInProgressCheck(
        name: checkName,
        title: "Building ${buildMode}/${linkMode}",
        summary: ':wrench: Building all the examples...',
    )
    def cmd = "python3 ${env.WORKSPACE}/resources/ci_cd/linux_build.py"
    cmd += " --build-mode ${buildMode}"
    cmd += " --link-mode ${linkMode}"
    cmd += " --build-dir ${get_build_directory(buildMode, linkMode)}"
    cmd += ' | tee $RTI_LOGS_FILE'
    def returnCode = sh(
        script: """#!/bin/bash
            set -o pipefail
            ${cmd}
        """,
        returnStatus: true,
    )

    sh 'python3 resources/ci_cd/jenkins_output.py'
    if (returnCode) {
        publishFailedCheck(
            name: checkName,
            summary: ':warning: There was an error building the examples.',
        )
        error(
            'There were errors building the examples in'
            + " ${buildMode} mode when linking in"
            + " ${linkMode} mode."
        )
    }
    publishPassedCheck(
        name: checkName,
        summary: ':white_check_mark: All the examples were built succesfully.',
    )
}

def get_build_directory(String buildMode, String linkMode) {
    return "build_${buildMode}_${linkMode}"
}

pipeline {
    agent none

    stages {
        stage('Executor Check') {
            steps {
                publishInProgressCheck(
                    name: 'Waiting for executor',
                    title: 'Waiting',
                    summary: ':hourglass: Waiting for next available executor...'
                )
            }
        }

        stage('Build sequence') {
            agent {
                dockerfile {
                    filename 'resources/docker/Dockerfile.x64Linux4gcc7.3.0'
                    label 'docker'
                }
            }

            environment {
                RTI_INSTALLATION_PATH = "${env.WORKSPACE}/unlicensed"
                RTI_LOGS_FILE = "${env.WORKSPACE}/output_logs.txt"
                RTI_JENKINS_OUTPUT_FILE = "${env.WORKSPACE}/jenkins_output.md"
            }

            stages {
                stage('Download Packages') {
                    steps {
                        sh 'python3 resources/ci_cd/jenkins_output.py'
                        publishPassedCheck(
                            name: 'Waiting for executor',
                            summary: ':white_check_mark: Executor found.',
                        )

                        script {
                            connextdds_arch = sh(
                                script: 'echo $CONNEXTDDS_ARCH',
                                returnStdout: true
                            ).trim()
                        }

                        publishInProgressCheck(
                            title: 'Downloading',
                            summary: ':arrow_down: Downloading RTI Connext DDS libraries...',
                        )

                        rtDownload (
                            serverId: 'rti-artifactory',
                            spec: """{
                                "files": [
                                {
                                    "pattern": "connext-ci/pro/weekly/",
                                    "props": "rti.artifact.architecture=${connextdds_arch};rti.artifact.kind=staging",
                                    "sortBy": ["created"],
                                    "sortOrder": "desc",
                                    "limit": 1,
                                    "flat": true
                                }]
                            }""",
                        )

                        // We cannot use the explode option because it is bugged.
                        // https://www.jfrog.com/jira/browse/HAP-1154
                        sh 'tar zxvf connextdds-staging-${CONNEXTDDS_ARCH}.tgz unlicensed/'

                        sh '''
                            cp ${RTI_INSTALLATION_PATH}/rti_connext_dds-*/lib/${CONNEXTDDS_ARCH}/openssl-1.*/* \
                                ${RTI_INSTALLATION_PATH}/rti_connext_dds-*/lib/${CONNEXTDDS_ARCH}/
                        '''
                    }

                    post {
                        always {
                            sh 'python3 resources/ci_cd/jenkins_output.py'
                        }
                        success {
                            publishPassedCheck(
                                summary: ':white_check_mark: RTI Connext DDS libraries downloaded.',
                            )
                        }
                        failure {
                            publishFailedCheck(
                                summary: ':warning: Failed downloading RTI Connext DDS libraries.',
                            )
                        }
                        aborted {
                            publishAbortedCheck(
                                summary: ':no_entry: The download of RTI Connext DDS libraries was aborted.',
                            )
                        }
                    }
                }

                stage('Build all modes') {
                    matrix {
                        axes {
                            axis {
                                name 'buildMode'
                                values 'release', 'debug'
                            }
                            axis {
                                name 'linkMode'
                                values 'static', 'dynamic'
                            }
                        }
                        stages {
                            stage('Build single mode') {
                                environment {
                                    RTI_LOGS_FILE = "${env.WORKSPACE}/output_${buildMode}_${linkMode}.log"
                                    RTI_JENKINS_OUTPUT_FILE = "${env.WORKSPACE}/jenkins_output_${buildMode}_${linkMode}.md"
                                }
                                steps {
                                    echo("Build ${buildMode}/${linkMode}")
                                    runBuildStage(buildMode, linkMode)
                                }
                                post {
                                    aborted {
                                        publishAbortedCheck(
                                            summary: ':no_entry: The build was aborted.',
                                        )
                                    }
                                }
                            }
                        }
                    }
                }

                stage('Static Analysis') {
                    steps {
                        publishInProgressCheck(
                            title: 'Analyzing',
                            summary: ':mag: Analyzing all the examples...',
                        )
                        script {
                            cmd = 'python3 resources/ci_cd/linux_static_analysis.py'
                            cmd += " --build-dir ${get_build_directory('release', 'dynamic')}"
                            cmd += ' | tee $RTI_LOGS_FILE'
                        }
                        sh """#!/bin/bash
                            set -o pipefail
                            ${cmd}
                        """
                    }

                    post {
                        always {
                            sh 'python3 resources/ci_cd/jenkins_output.py'
                        }
                        success {
                            publishPassedCheck(
                                summary: ':white_check_mark: Succesfully analysed',
                            )
                        }
                        failure {
                            publishFailedCheck(
                                summary: ':warning: The static analysis failed',
                            )
                        }
                        aborted {
                            publishAbortedCheck(
                                summary: ':no_entry: The static analysis was aborted',
                            )
                        }
                    }
                }
            }

            post {
                cleanup {
                    cleanWs()
                }
                aborted {
                    publishAbortedCheck(
                        name: 'Waiting for executor',
                        summary: ':no_entry: The pipeline was aborted',
                    )
                }
            }
        }
    }
}

Logs

There are no logs for this job