Masukkan file konfigurasi ke dalam kontainer Docker pipa Jenkins deklaratif dari Dockerfile

Saya mencoba memasukkan file konfigurasi yang merupakan kumpulan rahasia ke dalam wadah Docker sebagai bagian dari Jenkinsfile yang saat ini menggunakan sintaks deklaratif.

File Jenkins:

pipeline {
  agent {
    dockerfile true
  }
  environment {
    CONFIG = credentials('name-of-Jenkins-secret-file')
  }
  stages {
    stage('Build') {
      steps {
        sh "echo ${CONFIG} > /usr/src/scripts/config/default.json"
      }
    }
  }
}

file buruh pelabuhan:

FROM node:carbon

WORKDIR /usr/src/scripts
COPY package*.json ./
RUN npm install
COPY . .

ENTRYPOINT node ./run.js

Langkah-langkah yang diselesaikan saat membangun:

Record trace of a Docker image used in FROM <1s
docker build -t 47a61bffd47bc4f049a967a05f05889983734f32 -f "Dockerfile" "."— Shell Script 1s
Dockerfile— Read file from workspace <1s
Checks if running on a Unix-like node <1s
General SCM <1s
Shell Script
[repo_branch-4ZXYH5FGLRRVXQLNJJ2SCGKMMGIMGWH5VUJEHPFZ6CDVODQSHRHQ] Running shell script
Error response from daemon: Container 0daa4e0d56818544fd228607d7c6318963f80ad99c0f8781a425163c4fb4fc2f is not running
script returned exit code -2
STATUS: FAILED

Saya tidak yakin apakah saya mencoba mencapai ini dengan cara yang aneh atau tidak biasa. Sebagian besar materi yang saya temukan membahas pembuatan image buruh pelabuhan menggunakan pipeline bertujuan untuk menyimpannya ke repositori pribadi, yang menunjukkan bahwa saya mungkin melakukan sesuatu yang aneh. Kesalahan tersebut menunjukkan bahwa operasi tidak dapat dilakukan pada kontainer yang tidak berjalan.


person ansythmus    schedule 14.02.2018    source sumber


Jawaban (2)


Saya menyarankan hal berikut:

Jenkinsfile

pipeline {
  agent {
    dockerfile true
  }
  environment {
    CONFIG = credentials('name-of-Jenkins-secret-file')
  }
  stages {
    stage('Copy Script') {
      steps {
        sh "echo ${CONFIG} > /usr/src/scripts/config/default.json"
      }
    }
    stage('Run Server') {
      steps {
        sh "cd /usr/src/scripts && node ./run.js"
      }
    }
  }
}

file buruh pelabuhan:

FROM node:carbon

WORKDIR /usr/src/scripts
COPY package*.json ./
RUN npm install

ENTRYPOINT ["/bin/bash"]

Saya berasumsi ini masih bukan kode yang sempurna, tetapi mungkin bisa menjadi titik awal.

person Jaydeep Dave    schedule 19.06.2018

Jika Anda perlu menyematkan file itu sendiri ke dalam image buruh pelabuhan, Anda dapat meneruskan file tersebut sebagai argumen selama pembuatan buruh pelabuhan.

pipeline {
  agent {
    dockerfile true
  }
  environment {
    CONFIG = credentials('name-of-Jenkins-secret-file')
  }
  stages {
    stage('Copy Script') {
      steps {
        #copy file to workspace
        cp ${CONFIG} app.cfg
        docker build -t your_image_name . -- --build-arg CONFIG_FILE=app.cfg
      }
    }
    stage('Run Server') {
      steps {
        sh "cd /usr/src/scripts && node ./run.js"
      }
    }
  }
}

Dalam file Docker:

FROM node:carbon

# this is the arg need to pass in docker build
ARG CONFIG_FILE

WORKDIR /usr/src/scripts
# copy the config file to your image
COPY $CONFIG_FILE /app/config
COPY package*.json ./
RUN npm install

ENTRYPOINT ["/bin/bash"]

person alltej    schedule 07.02.2020