在 Gitlab-runner docker 容器中安装包
Install package inside a Gitlab-runner docker container
我有一个项目的 Gitlab-ci 配置,我想将 src
内带有 .less
扩展名的文件复制到 dist
,维护它们的路径。为此,我使用:
find . -name '*.less' -exec rsync -R {} ../dist ';'
我安装了 gitlab-运行ner 镜像:
docker pull gitlab/gitlab-runner:latest
并且 运行 它与:
docker run -d --name gitlab_runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
并注册:
docker run --rm -t -i -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
以docker作为执行人——也许这很重要——。
这是我项目的结构:
.
├── .gitignore
├── .gitlab-ci.yml
├── README.md
├── package.json
├── dist
├── src
│ ├── components
│ │ └── MyComponent
│ │ ├── Loader.less
│ │ └── Loader.tsx
│ └── index.tsx
└── tsconfig.json
这是我的 package.json:
{
"name": "@me/components",
"version": "0.0.0",
"description": "Components library",
"scripts": {
"build": "tsc -d && cd src && find . -name '*.less' -exec rsync -R {} ../dist ';' && cd ..",
},
"devDependencies": {
"typescript": "^3.6.2",
"react-dom": "^16.9.0"
},
"dependencies": {
"prop-types": "^15.7.2",
"react": "^16.9.0",
}
}
这是我的 .gitlab-ci.yml
文件:
image: node:latest
stages:
- install
- build
install:
stage: install
script:
- npm install
artifacts:
paths:
- node_modules/
build:
stage: build
script:
- npm run build
artifacts:
paths:
- dist
如你所见,gitlab 运行ner 将 运行 npm run build
,其中有以下行:
"build": "tsc -d && cd src && find . -name '*.less' -exec rsync -R {} ../dist ';' && cd ..",
问题是我得到了这个输出:
$ npm run build
> @me/components@0.0.0 build /builds/me/components
> tsc -d && cd src && find . -name '*.less' -exec rsync -R {} ../dist ';' && cd ..
find: 'rsync': No such file or directory
find: 'rsync': No such file or directory
find: 'rsync': No such file or directory
find: 'rsync': No such file or directory
我想这是因为linux版本的gitlab运行nerdocker镜像没有rsync
.
如果我在 运行 docker exec -it 9387492637 bash
时进入 docker 容器,我可以尝试 运行 cd src && find . -name '*.less' -exec rsync -R {} ../dist ';' && cd ..
root@239f8a797:/test# cd src && find . -name '*.less' -exec rsync -R {} ../dist ';' && cd ..
find: 'rsync': No such file or directory
find: 'rsync': No such file or directory
如果我尝试安装 rsync
,它会失败:
root@239f8a797:/test# apt-get install rsync
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package rsync
难道是因为gitlab-运行ner镜像中没有安装rsync
?是因为执行人?我该如何解决这个问题?
谢谢!
我建议在扩展图像中添加 rsync
,如果不包含 rsync
,则使用该图像而不是官方图像,否则您每次都需要 docker exec
。
FROM gitlab/gitlab-runner:latest
RUN apt-get update -y && \
apt-get install rsync -y
或者另一种选择是
docker exec -it 9387492637 bash -c "apt-get update -y && apt-get install rsync -y"
更新:
从@zeehio 的回答中,我也认为 nodejs 有问题。所以你可以按照@zeehio的方法,或者你也可以使用这种方法。
FROM node:latest
RUN apt-get update -y && \
apt-get install rsync -y
或者我会建议使用比 node:latest
更轻的 alpine based nodejs
图像
FROM node:alpine
RUN apk add --no-cache rsync
奖金:
您在 80MB
.
中获得了 nodejs、npm 和 rsync
节点:最新
node:latest
是 907MB,大约是 alpine 的 9 倍。
对我来说 node:latest
图像似乎没有 rsync
。您可以在脚本运行前安装 rsync
:
before_script:
- apt-get update -qq && apt-get install -y -qq rsync
或者您的 .gitlab-ci.yml
完整:
image: node:latest
stages:
- install
- build
install:
stage: install
script:
- npm install
artifacts:
paths:
- node_modules/
build:
stage: build
before_script:
- apt-get update -qq && apt-get install -y -qq rsync
script:
- npm run build
artifacts:
paths:
- dist
我有一个项目的 Gitlab-ci 配置,我想将 src
内带有 .less
扩展名的文件复制到 dist
,维护它们的路径。为此,我使用:
find . -name '*.less' -exec rsync -R {} ../dist ';'
我安装了 gitlab-运行ner 镜像:
docker pull gitlab/gitlab-runner:latest
并且 运行 它与:
docker run -d --name gitlab_runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
并注册:
docker run --rm -t -i -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
以docker作为执行人——也许这很重要——。
这是我项目的结构:
.
├── .gitignore
├── .gitlab-ci.yml
├── README.md
├── package.json
├── dist
├── src
│ ├── components
│ │ └── MyComponent
│ │ ├── Loader.less
│ │ └── Loader.tsx
│ └── index.tsx
└── tsconfig.json
这是我的 package.json:
{
"name": "@me/components",
"version": "0.0.0",
"description": "Components library",
"scripts": {
"build": "tsc -d && cd src && find . -name '*.less' -exec rsync -R {} ../dist ';' && cd ..",
},
"devDependencies": {
"typescript": "^3.6.2",
"react-dom": "^16.9.0"
},
"dependencies": {
"prop-types": "^15.7.2",
"react": "^16.9.0",
}
}
这是我的 .gitlab-ci.yml
文件:
image: node:latest
stages:
- install
- build
install:
stage: install
script:
- npm install
artifacts:
paths:
- node_modules/
build:
stage: build
script:
- npm run build
artifacts:
paths:
- dist
如你所见,gitlab 运行ner 将 运行 npm run build
,其中有以下行:
"build": "tsc -d && cd src && find . -name '*.less' -exec rsync -R {} ../dist ';' && cd ..",
问题是我得到了这个输出:
$ npm run build
> @me/components@0.0.0 build /builds/me/components
> tsc -d && cd src && find . -name '*.less' -exec rsync -R {} ../dist ';' && cd ..
find: 'rsync': No such file or directory
find: 'rsync': No such file or directory
find: 'rsync': No such file or directory
find: 'rsync': No such file or directory
我想这是因为linux版本的gitlab运行nerdocker镜像没有rsync
.
如果我在 运行 docker exec -it 9387492637 bash
时进入 docker 容器,我可以尝试 运行 cd src && find . -name '*.less' -exec rsync -R {} ../dist ';' && cd ..
root@239f8a797:/test# cd src && find . -name '*.less' -exec rsync -R {} ../dist ';' && cd ..
find: 'rsync': No such file or directory
find: 'rsync': No such file or directory
如果我尝试安装 rsync
,它会失败:
root@239f8a797:/test# apt-get install rsync
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package rsync
难道是因为gitlab-运行ner镜像中没有安装rsync
?是因为执行人?我该如何解决这个问题?
谢谢!
我建议在扩展图像中添加 rsync
,如果不包含 rsync
,则使用该图像而不是官方图像,否则您每次都需要 docker exec
。
FROM gitlab/gitlab-runner:latest
RUN apt-get update -y && \
apt-get install rsync -y
或者另一种选择是
docker exec -it 9387492637 bash -c "apt-get update -y && apt-get install rsync -y"
更新: 从@zeehio 的回答中,我也认为 nodejs 有问题。所以你可以按照@zeehio的方法,或者你也可以使用这种方法。
FROM node:latest
RUN apt-get update -y && \
apt-get install rsync -y
或者我会建议使用比 node:latest
alpine based nodejs
图像
FROM node:alpine
RUN apk add --no-cache rsync
奖金:
您在 80MB
.
节点:最新
node:latest
是 907MB,大约是 alpine 的 9 倍。
对我来说 node:latest
图像似乎没有 rsync
。您可以在脚本运行前安装 rsync
:
before_script:
- apt-get update -qq && apt-get install -y -qq rsync
或者您的 .gitlab-ci.yml
完整:
image: node:latest
stages:
- install
- build
install:
stage: install
script:
- npm install
artifacts:
paths:
- node_modules/
build:
stage: build
before_script:
- apt-get update -qq && apt-get install -y -qq rsync
script:
- npm run build
artifacts:
paths:
- dist