เริ่มต้นกระบวนการตลอดไปใน Jenkins build step หรือไม่?


17

ฉันใช้คำสั่งเชลล์เมื่อสิ้นสุดการปรับใช้ Jenkins เพื่อรีสตาร์ทสคริปต์ถาวร:

npm install && forever stop app.js && forever start -a -l /var/log/forever.log app.js

เมื่อฉันเรียกใช้ในฐานะผู้ใช้เจนกินส์ทุกอย่างทำงานได้ดีและคอนโซลเอาต์พุตจากประวัติการสร้างยังบอกฉันว่าสคริปต์ตลอดไปกำลังทำงานอยู่ อย่างไรก็ตามกระบวนการหยุดทันทีหลังจากการปรับใช้เสร็จสิ้นและกระบวนการถาวรจะหยุดทำงาน

อะไรเป็นสาเหตุของพฤติกรรมนี้และฉันจะแก้ไขได้อย่างไร

คำตอบ:


28

เจนกินส์ฆ่าทุกกระบวนการวางไข่โดยงาน

สิ่งนี้สามารถปิดใช้งานได้โดยตั้งค่าBUILD_IDตัวแปรสภาพแวดล้อมเป็นอย่างอื่น:

export BUILD_ID=dontKillMe

ดูhttps://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKillerสำหรับรายละเอียด


1
นี่เป็นวิธี 'สะอาด' ที่จะทำหรืออย่างอื่นที่แนะนำ?
แพทริค

เท่าที่ฉันรู้มันเป็นวิธีเดียวที่จะปิดการใช้งาน ProcessTreeKiller
rcomblen

rcomblen ถูกต้องตรวจสอบwiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller
Jan Molak

ก่อนหน้านี้ฉันได้รับ [ssh-agent] หยุดทำงาน ถูกฆ่าโดยสัญญาณ 15. ถูกฆ่าโดยสัญญาณ 15 หลังจากนี้ฉันได้ [เอสเอสเอช] หยุดแล้ว แต่มันยังคงถูกฆ่า :(
Amit Kumar Gupta

1

คำถามนี้ค่อนข้างเก่า แต่มีทางออกที่ดีกว่าในกรณีนี้ฉันคิดว่า

ใช้ปลั๊กอินสคริปต์ Post-Build

ตัวปลั๊กอินเองไม่ได้รับการอัพเดตตั้งแต่ต้นปี 2559 แต่ทำงานได้และคุณไม่ต้องเล่นกับตัวแปรสภาพแวดล้อม ดูเหมือนจะเป็นสิ่งเล็กน้อยสำหรับฉัน


0

ในงานไปป์ไลน์ใหม่การตั้งค่าBUILD_IDไม่ทำงานอีกต่อไป แต่คุณต้องตั้งค่าJENKINS_NODE_COOKIEให้ป้องกันเจนกินส์ไม่ให้ฆ่ากระบวนการของคุณเมื่องานเสร็จสิ้น

sh 'export JENKINS_NODE_COOKIE=dontKillMe'
sh 'myProcess'

หรือเลือกเพิ่มเติม:

sh 'JENKINS_NODE_COOKIE=dontKillMe myProcess'

ดูวิกิพีเดียใน ProcessTreeKillerและความคิดเห็นนี้ในเจนกิ้นส์จิรา


0

ลองด้วย:

(
  set -e
  export BUILD_ID=dontKillMe
  export JENKINS_NODE_COOKIE=dontKillMe
  npm install
  forever stop app.js
  forever start -a -l /var/log/forever.log app.js &
) &
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.