Jenkins: Docker'ı yapı ortamı olarak kullanma izni sorunu


11

Jenkins'i Ubuntu 16.04 makinesine kurdum. Jenkins'in kendisi bir kapta çalıştırılmaz. Ne yapmak istiyorum sadece yarn installbir düğüm görüntü kullanarak çağırmak . İşte benim Jenkinsfile'm:

pipeline {
    agent any
    stages {
        stage('install node modules...') {
            agent { docker 'node' }
            steps {
                sh 'cd /path/to/package.json; yarn install'
            }
        }
    }
}

Oldukça açık, değil mi?

jenkins kullanıcısı / grubu 112:116ve düğüm kabının kullanıcı kimliği 1000, dolayısıyla iplik işlemi (düğüm kullanıcısı 1000 olarak çalıştırılır) gibi şeyleri yapamaz mkdir /.config.

Tartışmada geçen düğüm kabını döndürmeye çalıştım, -u 1000dayanıklı dizinler oluşturmaya çalışırken izin sorunlarına çarptı.

Öyle ya da böyle bir konu gibi görünüyor, bu sorunu nasıl çözebilirim?

Jenkins günlükleri:

Aşağıda yapı başlar ve başarısız olur.

[Pipeline] sh
[Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script
+ docker inspect -f . node
.
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 112:116 -w /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2 -v /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2:/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2:rw,z -v /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2@tmp:/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** --entrypoint cat node
[Pipeline] {
[Pipeline] sh
[Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script
+ cd /path/to/package.json
+ yarn install
yarn install v0.24.6
error An unexpected error occurred: "EACCES: permission denied, mkdir '/.config'".
info If you think this is a bug, please open a bug report with the information provided in "/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2/<path>/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
[Pipeline] }
$ docker stop --time=1 c1147934ea689f71a449e486282db03338b12182368def31bdf8e8cf179ab46a
$ docker rm -f c1147934ea689f71a449e486282db03338b12182368def31bdf8e8cf179ab46a
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE

Lütfen günlükleri ekleyin
030

Günlükleri iliştirdi. Jenkins, bu docker görüntüdeki jenkins kullanıcısı 1000, düğüm görüntüdeki düğüm kullanıcısıyla aynı uid olduğu için, iyi çalışan resmi docker görüntüsünü kullanarak çalıştırmayı denedim.
Michael

Selinux etkin ve zorlayıcı mı?
James Shewey

@JamesShewey Emin değilim. Ben sadece bir ubuntu AMI ec2 örneğini yaymak.
Michael

Ben devre dışı bırakmak inanıyorum, ama "sestatus" ile kontrol edin. Açıksa, kapatmayı deneyin.
James Shewey

Yanıtlar:


8

Düğüm ile aynı sorunu yaşadım. Şey, kaptaki dosyalar "root: root" a aittir. Liman işçisi argümanlarını eklemeyi deneyin -u root:root:

docker { 
    image 'node:8'
    args '-u root:root'
}

Çözüm benim için de işe yaradı. Bu neden Jenkins belgelerinde yok? (benim sorunum basit bir pip installkomutla sonuçlandı Could not install packages due to an EnvironmentError: [Errno 13] Permission denied; bunu arayan insanlara yardım etmek için burada bahsetmek. Hatta sorunu benim için kullanmış virtualenvveya pip install --userdüzeltmemiş bile )
Rabarberski

3

Başka bir imgeyle olsa da bugün benzer bir sorunum vardı.

docker {
 image 'node:8'
 args '--tmpfs /.config'
}

Referans: https://docs.docker.com/storage/tmpfs/ Bu şekilde, konteyner jenkinler içinde yok edildikten sonra mevcut olan herhangi bir güvenlik sızıntısı veya dosya için endişelenmemelisiniz.


3

buildEnv.inside("-u 0") {}sorunumu çözdü. Ancak daha sonra çalışma alanı, çalışma alanını temizlerken bir sonraki çalıştırmada kullanıcı Jenkins tarafından silinemeyen kök ve sahip olunan dizin ve dosyaları içerecektir, bu yüzden sh "sudo chown jenkins: -R \$PWD/" boru hattının başında ekledim .


Benzer bir yaklaşım kullandım, ancak başlangıçta chown yerine boru hattının "Temizleme" adımı olarak 'sh "chmod -R a + w \ $ PWD"' yi çalıştırdım. Jenkins kullanıcı benim kapsayıcı tanımlanmadı ve sudo kullanılabilir değildi. Dosyaları da silebilirdim, ancak bir şeyler ters giderse onları araştırmaya devam etmenin daha iyi olabileceğini düşündüm.
Olivier Boudry
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.