Memahami langkah-langkah Jenkinsfile untuk agen Docker

Saya memiliki Jenkinsfile dengan langkah-langkah berikut:

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'
      }
    }

Menurut dokumen, Jenkins harus Mengeksekusi langkah-langkah dalam tahap ini dalam penampung yang baru dibuat menggunakan gambar ini.

Jika benar, lalu mengapa perintah sh pada langkah kedua berhasil dijalankan? Bagaimana cara mengakses file di host Jenkins?

Bagi saya, sepertinya perintah dijalankan pada host Jenkins. Lalu mengapa mvn clean install berfungsi dengan baik? Host Jenkins belum menginstal Maven.


person VSh    schedule 27.03.2019    source sumber


Jawaban (1)


Karena biasanya Anda ingin mengakses konten ruang kerja Anda, Jenkins secara otomatis memasangnya sebagai volume ke dalam container. Jika tidak, mungkin di 99% dari semua pekerjaan, kita harus menentukan bahwa repo yang diperiksa harus dipasang ke dalam wadah.

Anda seharusnya dapat melihat parameter -v di output build saat mengeluarkan perintah docker run.

person StephenKing    schedule 27.03.2019
comment
Terima kasih, saya melihatnya di log. Namun direktori /home dengan file props tidak berada di dalam direktori ruang kerja yang dipetakan dan tidak dipetakan ke container secara default. Bagaimana container mengaksesnya? - person VSh; 28.03.2019
comment
Begitu ya, apa keluaran buildnya? - person StephenKing; 28.03.2019
comment
Pembangunan berhasil dijalankan dan saya mendapatkan artefak jar yang valid dengan application-prod.properties yang dimaksudkan di dalam direktori /target di ruang kerja Jenkins. Selain itu, saya perhatikan bahwa di log direktori ruang kerja Jenkins dipetakan bukan dengan flag -v, tetapi dengan -w (sebagai workdir), tetapi saya masih bisa' Saya tidak mengerti bagaimana direktori /home diakses. - person VSh; 28.03.2019
comment
Mungkin, saya mengerti. Host Jenkins saya juga berjalan di container. Dan ketika kontainer Maven dijalankan, ada juga opsi --volumes-from (bersama dengan -w) yang memetakan semua volume kontainer Jenkins ke dalam kontainer Maven. Terima kasih untuk bantuannya! - person VSh; 28.03.2019