Server&DevOps

[Jenkins] 웹훅 에러 No valid crumb was included in the request

킨글 2024. 9. 22. 17:19

아래와 같이 jenkins에게 웹훅을 날리는 경우에 No valid crumb was included in the request 에러가 나는 경우가 발생했다.

curl -X POST http://<jenkins-server>/job/<job-name>/build?token=<your-token>

 

Jenkins에서는 보안상 바로 호출이 안되기 때문에 CRUMB key를 받아야 한다고 한다.

그래서 기존에 아래와 같이 했던 부분을 

- name: Trigger Jenkins Build
        run: |
          curl -X POST http://${{ secrets.JENKINS_URL }}/job/travel-backend/build?token=${{ secrets.JENKINS_TOKEN }}

 

Crumb를 json으로 받아서 build를 처리하는 방식으로 변경했다. 

json을 parsing하주는 jq 플러그인 혹은 SecureRequester 플러그인을 설치해서 하는 방법이 있었는데,

추가로 플러그인을 설치해서 하고 싶지는 않아서 순수하게 처리하는 방식으로 처리했다. 

      - name: Get Jenkins Crumb
        id: get_crumb
        run: |
          CRUMB=$(curl -u "${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }}" \
           -v "http://${{ secrets.JENKINS_URL }}/crumbIssuer/api/json")
          
          CRUMB_FIELD=$(echo "$CRUMB" | grep -oP '"crumbRequestField":\s*"\K[^"]+')
          CRUMB_VALUE=$(echo "$CRUMB" | grep -oP '"crumb":\s*"\K[^"]+')

          FINAL_CRUMB="$CRUMB_FIELD:$CRUMB_VALUE"
          echo "FINAL_CRUMB=$FINAL_CRUMB" >> $GITHUB_ENV

      - name: Trigger Jenkins Build
        run: |
          curl -u "${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }}" \
          -X POST "http://${{ secrets.JENKINS_URL }}/job/travel-backend/build" \
          -H "${{ env.FINAL_CRUMB }}"