프로그래밍/Jenkins

[Jenkins] ERROR: script returned exit code 해결

Beginner:) 2023. 5. 8.
320x100

젠킨스에서 "script returned exit code 20"에러가 발생했다.

 

해결방법은 너무나도 간단했다.

 

먼저, Jenkins의 파이프라인과 소스코드, Jenkins 로그이다.

 

- Jenkins pipeline

pipeline {
    agent any

    stages {
        stage('Git-checkout') {
            steps{
                git branch: 'main', credentialsId: 'park', url: 'http://gitlab.park-duck.world/developer_c/proj-test-c.git'
            }
        }
        stage('Build') {
            steps{
                sh 'gcc main.c'
                sh './a.out > index.html'
            }
        }
    }
}

 

- main.c

#include <stdio.h>

typedef union{
    unsigned char BYTE;
    struct{
        unsigned char bit0:1;
        unsigned char bit1:1;
        unsigned char bit2:1;
        unsigned char bit3:1;
        unsigned char bit4:1;
        unsigned char bit5:1;
        unsigned char bit6:1;
        unsigned char bit7:1;
    }BIT;
}Data;
Data test_data;

void main()
{
    test_data.BIT.bit0 = 1;
    test_data.BIT.bit2 = 1;
    test_data.BIT.bit4 = 1;
    test_data.BIT.bit6 = 1;

    printf("size = %ld, byte = %d\n",sizeof(test_data), test_data.BYTE);
    return;
}

 

- Jenkins log

Started by user park
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/pipe-build-gcc
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Git-checkout)
[Pipeline] git
The recommended git tool is: NONE
using credential park
 > git rev-parse --resolve-git-dir /var/lib/jenkins/workspace/pipe-build-gcc/.git # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url http://gitlab.park-duck.world/developer_c/proj-test-c.git # timeout=10
Fetching upstream changes from http://gitlab.park-duck.world/developer_c/proj-test-c.git
 > git --version # timeout=10
 > git --version # 'git version 2.17.1'
using GIT_ASKPASS to set credentials git credentials
 > git fetch --tags --progress -- http://gitlab.park-duck.world/developer_c/proj-test-c.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git rev-parse refs/remotes/origin/main^{commit} # timeout=10
Checking out Revision 0b2ad0f92a3ef6d799b1242ffd0d2980db2dccf8 (refs/remotes/origin/main)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 0b2ad0f92a3ef6d799b1242ffd0d2980db2dccf8 # timeout=10
 > git branch -a -v --no-abbrev # timeout=10
 > git branch -D main # timeout=10
 > git checkout -b main 0b2ad0f92a3ef6d799b1242ffd0d2980db2dccf8 # timeout=10
Commit message: "Init c proj"
 > git rev-list --no-walk 0b2ad0f92a3ef6d799b1242ffd0d2980db2dccf8 # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] sh
+ gcc main.c
[Pipeline] sh
+ ./a.out
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 20
Finished: FAILURE

 

scripts가 20이 반환되었다는 것 같은데,

 

검색해보면 보통 1이 반환되고 20이 반환된 것은 찾을 수 없었다.

 

어쨋건 보통 return 값이 올바르지 않을 때 나타난다고 하는데 

 

Pipeline Steps를 보면 "./a.out > index.html"에서 오류가 나는 것을 볼 수 있는데,

 

예측하기(뇌피셜)로는  mian문이 void 타입이여서 이상한 매개변수를 받아 출력해서 그런 것이 아닐까 싶다.

 

그 값이 무엇인진 모르겠으나 main문의 타입을 int로 바꾸로 return 9를 해주면 "ERROR: script returned exit code 9"를 출력한다.

 

 

 

어쨋건 main문의 타입을 int로 변경하고 0을 리턴해주니 문제는 해결되었다. 

(Jenkins에서 script 코드로 해결하는 방법도 있는 듯 한데, 아직은 초보라 모르겠다)

 

#include <stdio.h>

typedef union{
    unsigned char BYTE;
    struct{
        unsigned char bit0:1;
        unsigned char bit1:1;
        unsigned char bit2:1;
        unsigned char bit3:1;
        unsigned char bit4:1;
        unsigned char bit5:1;
        unsigned char bit6:1;
        unsigned char bit7:1;
    }BIT;
}Data;
Data test_data;

int main()
{
    test_data.BIT.bit0 = 1;
    test_data.BIT.bit2 = 1;
    test_data.BIT.bit4 = 1;
    test_data.BIT.bit6 = 1;

    printf("size = %ld, byte = %d\n",sizeof(test_data), test_data.BYTE);
    
    return 0;
}

 

 

 

 

반응형

댓글