แทรกไฟล์กำหนดค่าลงในคอนเทนเนอร์ Docker ไปป์ไลน์ Jenkins ที่ประกาศจาก Dockerfile

ฉันกำลังพยายามแทรกไฟล์กำหนดค่าที่รวบรวมความลับลงในคอนเทนเนอร์ Docker โดยเป็นส่วนหนึ่งของ Jenkinsfile ที่กำลังใช้ไวยากรณ์การประกาศ

เจนกินส์ไฟล์:

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

นักเทียบท่าไฟล์:

FROM node:carbon

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

ENTRYPOINT node ./run.js

ขั้นตอนที่เสร็จสิ้นเมื่อสร้าง:

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

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


person ansythmus    schedule 14.02.2018    source แหล่งที่มา


คำตอบ (2)


ฉันอยากจะแนะนำดังต่อไปนี้:

เจนกินส์ไฟล์

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

นักเทียบท่าไฟล์:

FROM node:carbon

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

ENTRYPOINT ["/bin/bash"]

ฉันคิดว่านี่ยังไม่ใช่รหัสที่สมบูรณ์แบบ แต่อาจเป็นจุดเริ่มต้น

person Jaydeep Dave    schedule 19.06.2018

หากคุณต้องการฝังไฟล์ในอิมเมจนักเทียบท่า คุณสามารถส่งไฟล์เป็นอาร์กิวเมนต์ระหว่างการสร้างนักเทียบท่าได้

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

ในไฟล์นักเทียบท่า:

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