ทำความเข้าใจขั้นตอนของ Jenkinsfile สำหรับตัวแทน Docker

ฉันมี Jenkinsfile ตามขั้นตอนต่อไปนี้:

stage('build') {
      agent {
           docker {
               image 'maven:3-alpine'
               args '-v /ec2-user/.m2:/root/.m2'
           }
      }
      steps {
        git(url: 'https://github.com/user/project.git', branch: 'master')
        sh 'cp /home/application-prod.properties src/main/resources'
        sh 'mvn clean install'
      }
    }

ตามเอกสาร Jenkins ควรดำเนินการขั้นตอนในขั้นตอนนี้ในคอนเทนเนอร์ที่สร้างขึ้นใหม่โดยใช้อิมเมจนี้

หากเป็นเช่นนั้น เหตุใดคำสั่ง sh ของขั้นตอนที่ 2 จึงดำเนินการได้สำเร็จ จะเข้าถึงไฟล์บนโฮสต์ Jenkins ได้อย่างไร

สำหรับฉัน ดูเหมือนว่าคำสั่งต่างๆ จะถูกดำเนินการบนโฮสต์ Jenkins ถ้าอย่างนั้นทำไม mvn clean install จึงทำงานได้ดี โฮสต์ Jenkins ไม่ได้ติดตั้ง Maven


person VSh    schedule 27.03.2019    source แหล่งที่มา


คำตอบ (1)


เนื่องจากเป็นกรณีปกติที่คุณต้องการเข้าถึงเนื้อหาในพื้นที่ทำงานของคุณ Jenkins จึงติดตั้งเป็นไดรฟ์ข้อมูลลงในคอนเทนเนอร์โดยอัตโนมัติ มิฉะนั้น ในงานประมาณ 99% ของงานทั้งหมด จะต้องระบุว่า repo ที่เช็คเอาท์ควรติดตั้งไว้ในคอนเทนเนอร์

คุณควรจะเห็นพารามิเตอร์ -v ในเอาต์พุตของบิลด์เมื่อออกคำสั่ง docker run

person StephenKing    schedule 27.03.2019
comment
ขอบคุณครับ ผมเห็นมันในบันทึกแล้ว แต่ไดเร็กทอรี /home ที่มีไฟล์อุปกรณ์ประกอบฉากไม่อยู่ในไดเร็กทอรีพื้นที่ทำงานที่แมป และไม่ได้แมปกับคอนเทนเนอร์ตามค่าเริ่มต้น คอนเทนเนอร์เข้าถึงมันได้อย่างไร? - person VSh; 28.03.2019
comment
ฉันเข้าใจแล้ว บิลด์เอาท์พุตคืออะไร? - person StephenKing; 28.03.2019
comment
บิลด์รันได้สำเร็จ และฉันได้รับ jar artifact ที่ถูกต้องโดยมี application-prod.properties ที่ต้องการอยู่ภายในไดเร็กทอรี /target ในพื้นที่ทำงานของ Jenkins นอกจากนี้ ฉันสังเกตเห็นว่าในบันทึก ไดเรกทอรีพื้นที่ทำงานของ Jenkins ไม่ได้แมปกับแฟล็ก -v แต่ด้วย -w (เป็น workdir) แต่ฉันก็ยังทำได้ ไม่เข้าใจวิธีการเข้าถึง /home dir - person VSh; 28.03.2019
comment
อาจเป็นไปได้ว่าฉันเข้าใจแล้ว โฮสต์ Jenkins ของฉันยังทำงานในคอนเทนเนอร์ด้วย และเมื่อรันคอนเทนเนอร์ Maven ก็มีตัวเลือก --volumes-from (พร้อมด้วย -w) ซึ่งจะแมปปริมาตรคอนเทนเนอร์ทั้งหมดของ Jenkins ลงในคอนเทนเนอร์ Maven ขอขอบคุณสำหรับความช่วยเหลือของคุณ! - person VSh; 28.03.2019