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;
}
반응형
'프로그래밍 > Jenkins' 카테고리의 다른 글
[Jenkins] Git 변경 적용되지 않는 오류 해결 (0) | 2023.05.29 |
---|---|
[Jenkins] SCM shell script 실행하기 (0) | 2023.05.24 |
[Jenkins] ERROR: Couldn't find any revision to build. Verify the repository and branch configuration for this job. 해결하기 (0) | 2023.05.08 |
[Jenkins] Git&Maven 설치, 설정하기 (0) | 2023.04.16 |
[Jenkins] shell scripts 빌드 생성 (0) | 2023.04.16 |
댓글