코드를 제출하고 서버에 배치했는데 왜 코드가 업데이트되지 않았습니까?

3235 단어

문제 설명:


몇 차례 이런 상황을 겪었다. 코드를 제출한 후에 패키지 배치를 통해 서버에 배치된 코드가 최신이 아니거나 이전의 오래된 코드를 수정한 것을 발견했다.

패키지 배포 프로세스 배경 설명:


gitlab--"Jenkins 서버에서jar 패키지를 칩니다--"잡힌jar 패키지를 필터하여 서버 A에build 이미지로 전송합니다--"이미지를 Harbor 창고로 전송합니다--"배치 용기를 서버에 전송

1. 코드가 커밋되지 않았습니다.


이 상황은 몇 차례 만난 적이 있다.

2. Jenkins의 캐시가 제거되지 않았습니다.


예를 들어test 이 서비스 패키지는api 캐시 디렉터리를 생성합니다. 이 캐시 디렉터리는 제인킨스 서버의 ~/입니다.m2/repository/com/run/test-api, 인용할 모듈을 포장합니다.만약 이 캐시 디렉터리가 삭제되지 않는다면, 포장할 때 이러한 인용 모듈의 내용을 업데이트하지 않아서, 패키지 안의 코드는 원래의 오래된 코드가 될 것이다.따라서 매번 포장하기 전에 스크립트를 rm-rf~/.m2/repository/com/run/test-api를 포장하여 포장할 때 이 서비스가 인용해야 하는 모듈을 매번 업데이트합니다.

3. 제인킨스 위의 프로젝트 디렉터리 변경, 패키지 스크립트 업데이트 없음


예를 들어 Jenkins에'rpc'라는 구축 프로젝트가 있습니다.한 번은 동료가 제인킨스 위의 rpc를'IOT'로 바꾸고 배치를 구축했는데 작성된 가방 안의 코드가 최신이 아니라는 것을 발견했다.왜냐하면 제인킨스에서 구축된 프로젝트의 원래 이름은 rpc이기 때문에 제인킨스의 프로젝트 디렉터리 아래에 생성된 디렉터리도 rpc입니다. rpc를'IOT'로 바꾸어 구축하면 제인킨스의 ~/.jenkins/workspace 디렉터리 아래에 새 프로젝트 디렉터리 'IOT' 를 생성합니다. 최근에 제출한 코드에 대한 패키지도 여기에 있습니다.하지만 제인킨스의 패키지 스크립트는 업데이트되지 않았습니다. 기본적으로 갑니다~/.jenkins/rpc 디렉터리 아래에서 만든jar 패키지를 찾으면 몇 번을 구축하든지 매번 만난jar 패키지는 rpc 디렉터리 아래에 있고 오래된 패키지이며 jenkins 구축도 틀리지 않습니다.따라서 제인킨스 패키지 스크립트를 제인킨스 서버의 ~/.Jenkins/workspace/IOT 디렉토리에서jar 패키지를 필터하면 OK

4,jar 패키지 이름 규칙 변경, 스크립트 원래 명령 필터 패키지


예: test-0.0.1.jar 이 가방, 원래 제인킨스가 만든 가방이 이 이름이에요.중도 개발에서 명명 규칙을 변경하여 작성된jar 패키지 이름이tes-0.0.1로 변경되었습니다.RELEASE.jar .하지만 제인킨스의 패키지 스크립트는 업데이트되지 않았습니다. 원래의 명령으로 ls~/.jenkins/workspace/tes/target/tes-|grep -E "[0-9.]{1,7}.jar\$"이 jar 패키지를 찾아서 서버 A에 build 이미지를 전송합니다. 그러나 jar 패키지의 이름을 변경해서 최신 패키지를 찾을 수 없습니다. 실제로 Jenkins 스크립트에서 jar 패키지를 서버 A로 전송하는 이 절차는 실행에 실패했습니다. build 이미지를 변경할 때 사용한 A 서버에서 오래된 jar 패키지를 서버에 배치했기 때문에 오래된 코드입니다. jar 패키지의 명령 규칙을 바꾸거나 고쳐야 합니다.Jenkins에서jar 패키지를 필터하는 명령을 ls~/로 변경합니다.jenkins/workspace/tes/target/tes-|grep -E "[0-9.]{1,7}.RELEASE."jar\$"(비고:jar 패키지,build,push 렌즈,배치는 모두 JENkins 스크립트에서 원격으로 완성되었기 때문에tes-0.0.1.RELEASE.jar라는 패키지를 찾을 수 없기 때문에 JENkins 구축은 틀릴 수 있습니다. 그러나 처음 만났을 때 JENkins 로그는 틀린 것을 보고하지 않았기 때문에 문제를 제때에 발견하지 못했습니다. 그러나 두 번째 구축할 때 틀린 것을 알렸습니다. 가방을 찾을 수 없으니 이 구덩이를 주의해야 합니다.)

5. Dockerfile이 변경되어 포장에 문제가 있음


예를 들어 아래의 이 구축은 제인킨스가 구축할 때 로그에 이상이 나타나지 않았지만 배치된 이미지는 오래된 코드입니다.서버 A에서build 이미지를 수동으로 실행하였는데 파일이 하나 없어서 새 이미지가build에 성공하지 못했고 Harbor 창고에서 이미지의 업데이트 시간도 변하지 않았습니다.수동build 미러 오류는 다음과 같습니다.
[root@slave-4 test]# /usr/bin/docker build -t registry.seff.com/seff/test:latest /usr/local/src/test
Sending build context to Docker daemon 35.51 MB
Step 1 : FROM docker.io/java:jre-alpine
 ---> fdc893b19a14
Step 2 : ADD test.jar /var/www/
 ---> Using cache
 ---> 9be1e7e46629
Step 3 : ADD server.properties /opt/settings/
 ---> Using cache
 ---> 1a42bca461fe
Step 4 : ADD localtime /etc/
 ---> Using cache
 ---> 5668e7e0f7bb
Step 5 : WORKDIR /var/www/
 ---> Using cache
 ---> adaee0558909
Step 6 : ADD crud-dump /etc/
 ---> Using cache
 ---> 4ab8834f71a9
Step 7 : ADD crud-heap_trace.txt /etc/
**lstat crud-heap_trace.txt: no such file or directory**

따라서 부족한 파일을 보충한 다음build 이미지를 다시 배치하면 OK
전재 대상:https://blog.51cto.com/10950710/2115004

좋은 웹페이지 즐겨찾기