Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Dockerfile向声明性Jenkins管道Docker容器中插入配置文件_Docker_Jenkins_Dockerfile_Jenkins Pipeline - Fatal编程技术网

从Dockerfile向声明性Jenkins管道Docker容器中插入配置文件

从Dockerfile向声明性Jenkins管道Docker容器中插入配置文件,docker,jenkins,dockerfile,jenkins-pipeline,Docker,Jenkins,Dockerfile,Jenkins Pipeline,我试图将一个配置文件作为当前使用声明性语法的Jenkins文件的一部分插入Docker容器中,该文件是一个机密集合 詹金斯档案: pipeline { agent { dockerfile true } environment { CONFIG = credentials('name-of-Jenkins-secret-file') } stages { stage('Build') { steps { sh "echo $

我试图将一个配置文件作为当前使用声明性语法的Jenkins文件的一部分插入Docker容器中,该文件是一个机密集合

詹金斯档案:

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

FROM node:carbon

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

ENTRYPOINT node ./run.js
FROM node:carbon

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

ENTRYPOINT ["/bin/bash"]
构建时完成的步骤:

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

记录在FROM中使用的Docker图像的跟踪,我建议如下:

詹金斯档案

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

FROM node:carbon

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

ENTRYPOINT node ./run.js
FROM node:carbon

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

ENTRYPOINT ["/bin/bash"]

我认为这仍然不是一个完美的代码,但可能是一个起点。

如果需要将文件本身嵌入docker映像,可以在docker构建期间将文件作为参数传递

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