簡體   English   中英

將配置文件從 Dockerfile 插入到聲明性 Jenkins 管道 Docker 容器中

[英]Insert a config file into a declarative Jenkins pipeline Docker container from 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"
      }
    }
  }
}

Dockerfile:

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

我不確定我是否試圖以一種奇怪或不尋常的方式實現這一目標。 我發現的大部分討論使用管道構建 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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM