在Gitlab runner docker容器中安装包
我有一个项目的Gitlab ci配置,我想将在Gitlab runner docker容器中安装包,docker,gitlab,gitlab-ci,devops,gitlab-ci-runner,Docker,Gitlab,Gitlab Ci,Devops,Gitlab Ci Runner,我有一个项目的Gitlab ci配置,我想将.less扩展名在src中的文件复制到dist,维护它们的路径。为此,我使用: find . -name '*.less' -exec rsync -R {} ../dist ';' 我安装gitlab runner映像时使用了: docker pull gitlab/gitlab-runner:latest 并使用以下工具运行它: docker run -d --name gitlab_runner --restart always \
.less
扩展名在src
中的文件复制到dist
,维护它们的路径。为此,我使用:
find . -name '*.less' -exec rsync -R {} ../dist ';'
我安装gitlab runner映像时使用了:
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
这是my 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 runner将运行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 runner docker映像没有rsync
如果在使用docker exec-it 9387492637 bash运行时输入docker容器,我可以尝试运行cd src&&find-名称'*.less'-execrsync-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 runner映像中没有安装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-answer,我也认为nodejs有问题。所以你可以遵循@zeehio的方法,也可以使用这种方法
FROM node:latest
RUN apt-get update -y && \
apt-get install rsync -y
或者我建议使用基于阿尔卑斯山的nodejs
图像,它比node:latest
FROM node:alpine
RUN apk add --no-cache rsync
奖金:
您只需80MB即可获得NodeJ、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
谢谢@adii!我使用了@zeehio的答案,但我也会尝试实现这个答案。