繁体   English   中英

为什么 skaffold build 工作但 skaffold run 或 skaffold dev 不工作?

[英]Why does skaffold build work but not skaffold run or skaffold dev?

我有一个在 docker 容器中运行的本地 NPM/Yarn 存储库“verdaccio”,绑定到我的主机http://0.0.0.0:4873/

我正在用 minikube 试用 skaffold。

我的 Dockerfile 配置需要两个构建参数:

ARG NPM_TOKEN
ARG PACKAGE_REPO_DOMAIN

在 my.yarnrc.yml 文件中使用:

yarnPath: .yarn/releases/yarn-3.2.0.cjs
nodeLinker: "node-modules"
npmRegistryServer: "http://${PACKAGE_REPO_DOMAIN}:4873/"
httpRetry: 10
httpTimeout: 100000
# networkConcurrency: 2
unsafeHttpWhitelist: 
  - "0.0.0.0"
  - localhost
  - verdaccio
  - host.minikube.internal
  - host.docker.internal
npmRegistries:
  "http://${PACKAGE_REPO_DOMAIN}:4873":
    npmAlwaysAuth: true
    npmAuthToken: ${NPM_TOKEN}

配置的域是host.minikube.internal 下面是我的 skaffold yaml,注意我将网络绑定到“主机”:

apiVersion: skaffold/v2beta28
kind: Config
build:
  local:
    push: false
  artifacts:
  - image: my-app
    docker:
      dockerfile: ./my-app/Dockerfile
      target: dev
      network: "host"
      buildArgs:
        NPM_TOKEN: "***REDACTED***"
        PACKAGE_REPO_DOMAIN: "host.minikube.internal"
    context: ../
    sync: 
      manual:
        - src: 'my-app/**/*.*'
          dest: ./my-app
        - src: './shared'
          dest: './shared'
        - src: '.yarn'
          dest: '.yarn'
deploy:
  helm:
    releases:
      - name: my-app
        chartPath: ../../infrastructure/helm/charts/my-app
        artifactOverrides:
          image: my-app
        imageStrategy:
          fqn: {}

当运行skaffold build时,它可以正常工作并构建图像。 但是,当运行skaffold devskaffold run时, yarn install在构建时挂起。 这意味着 yarn 无法到达 verdaccio 本地 npm 存储库。 我不明白为什么 - 它肯定仍在 minikube 环境中构建并且应该使用 host.minikube.internal -> localhost?

注意:我记得在 skaffold 之前也运行过这个(仍然失败):

skaffold config set --global local-cluster true
eval $(minikube -p minikube docker-env)

编辑

从那以后,我在这里进行了最少的复制: https ://github.com/gitn00b1337/skaffold-verdaccio

需要纱线、minikube + helm。

CD进入项目,然后:

$ sudo chmod -R a+rw ./verdaccio/storage 
$ yarn install 
$ minikube start
$ docker-compose up (seperate terminal)
$ skaffold config set --kube-context minikube local-cluster true
$ eval $(minikube -p minikube docker-env)
$ skaffold build # works

$ skaffold run # fails

在我们的项目中,我们必须执行以下操作才能使 verdaccio 工作:

添加新用户:

npm adduser --registry http://localhost:4873/

使用以下内容在共享模块和导入模块的服务中创建一个.npmrc文件:

 @my-app:registry=http://localhost:4873 strict-ssl=false

使用yarn build && yarn publish发布共享模块 verdaccio 然后你应该能够在你的浏览器中看到它,如果你导航到

http://localhost:4873

然后使用yarn install <shared-module>在服务中安装共享模块。

我认为您的设置挂起的原因是它缺少.nmprc文件或它需要strict-ssl=false

一旦你添加了它,那么希望当你skaffold run它会部署到 minikube

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM