- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Docker 容器中的 Jenkins 中运行 Angular 12 构建,在尝试将 Assets 文件复制到 dist
文件夹时看到此错误:
✖ Copying of assets failed.
Unable to copy assets: EPERM: operation not permitted, copyfile '/var/jenkins_home/workspace/MY-Web-App/src/assets/building.svg' -> '/var/jenkins_home/workspace/MY-Web-App/dist/my-web-app/assets/building.svg'
问题是在我们于 2021 年 6 月 15 日更新 Ubuntu docker 主机上的所有操作系统包后开始的。
首先想到的是 seccomp 是错误的,但我在 docker-compose 中有这个:
jenkins:
build: ./jenkins
image: my-ci-jenkins
hostname: ....
user: root
volumes:
- /data/ci/jenkins/jenkins_home:/var/jenkins_home
- artifactsvolume:/var/jenkins_home/workspace/artifacts/dist/my-web-app
ports:
- '8080:8080'
- '50000:50000'
security_opt:
- seccomp:./jenkins/seccomp.json
depends_on:
- mariadb
- gitea
environment:
- TZ=America/Los_Angeles
- JENKINS_HOME=/var/jenkins_home
restart: always
networks:
my-ci-net:
ipv4_address: ....
除此之外,在 seccomp.json 中:
{
"defaultAction": "SCMP_ACT_ERRNO",
"syscalls": [
...
{
"name": "copyfile",
"action": "SCMP_ACT_ALLOW",
"args": null
}, ...
]
}
然后,也许是权限,NodeJS,npm?不,我目前以 root 身份运行该进程,清理了 node_modules
,在 Jenkinsfile
中输入大量日志以查看发生了什么。我正在使用 Jenkins 管道运行构建——这些是结帐、日志记录和构建步骤:
checkout scm
sh 'rm -rf ./node_modules'
sh 'npm install'
sh 'mkdir -p ./dist/my-web-app/assets'
sh 'chmod 766 ./dist/my-web-app/assets'
sh 'ls -al ./dist/my-web-app'
sh 'whoami'
sh 'pwd'
sh 'ls -al'
sh 'node --version'
sh 'npm --version'
sh 'ls -al /var/jenkins_home/workspace/My-Web-App/src/assets'
sh 'ng build --configuration=staging'
产生以下日志:
Building...
[Pipeline] sh
+ mkdir -p ./dist/my-web-app/assets
[Pipeline] sh
+ chmod 766 ./dist/my-web-app/assets
[Pipeline] sh
+ ls -al ./dist/my-web-app
total 5848
.....
drwxrw-rw- 2 root root 4096 Jun 23 17:44 assets
.....
[Pipeline] sh
+ whoami
root
[Pipeline] sh
+ pwd
/var/jenkins_home/workspace/My-Web-App
[Pipeline] sh
+ ls -al
total 720
.....
drwxr-xr-x 3 root root 4096 Jun 23 17:43 dist
-rw-r--r-- 1 root root 95 Feb 28 2020 docker-compose.yml
-rw-r--r-- 1 root root 3522 Jun 23 16:48 Jenkinsfile
.....
[Pipeline] sh
+ node --version
v14.17.1
[Pipeline] sh
+ npm --version
6.14.13
[Pipeline] sh
+ ls -al /var/jenkins_home/workspace/My-Web-App/src/assets
total 2080
drwxr-xr-x 2 root root 4096 Jun 23 18:39 .
drwxr-xr-x 6 root root 4096 Jun 23 18:39 ..
-rw-r--r-- 1 root root 3737 Feb 28 2020 building.svg
.....
[Pipeline] sh
+ ng build --configuration=staging
- Generating browser application bundles (phase: setup)...
Compiling @angular/core : es2015 as esm2015
.....
✔ Browser application bundle generation complete.
- Generating ES5 bundles for differential loading...
✔ Browser application bundle generation complete.
✔ ES5 bundle generation complete.
- Copying assets...
✖ Copying of assets failed.
Unable to copy assets: EPERM: operation not permitted,
copyfile '/var/jenkins_home/workspace/My-Web-App/src/assets/building.svg'
-> '/var/jenkins_home/workspace/My-Web-App/dist/my-web-app/assets/building.svg'
构建成功地在 dist 文件夹中创建了 main-...js
文件等,但只是没有复制 Assets 。我可以成功创建一个文件,然后将其复制到 Jenkinsfile sh
中,但在 Angular 构建期间不能:
[Pipeline] sh
+ touch ./dist/my-web-app/assets/me.txt
[Pipeline] sh
+ cp ./dist/my-web-app/assets/me.txt ./dist/my-web-app/assets/me-copy.txt
[Pipeline] sh
+ ls -al ./dist/my-web-app/assets
total 8
drwxrw-rw- 2 root root 4096 Jun 24 10:40 .
drwxr-xr-x 3 root root 4096 Jun 23 18:43 ..
-rw-r--r-- 1 root root 0 Jun 24 10:40 me-copy.txt
-rw-r--r-- 1 root root 0 Jun 24 10:40 me.txt
也许是 Angular 版本?我在 Angular 9、10、11 和 12 上尝试过同样的事情,结果相同,所以看起来问题不是 Angular 造成的。 Angular 人员建议这不是 Angular 问题:https://github.com/angular/angular-cli/issues/21198
angular.config(配置)
"configurations": {
"staging": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.staging.ts"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2.7mb",
"maximumError": "15mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "8kb",
"maximumError": "10kb"
}
]
},
...
节点,NPM?我尝试过使用 Node 12 和 14。我尝试过 npm cache clean --force
、npm cache verify
并且如上所示,还删除了整个 node_modules
文件夹。
docker ?我使用 jenkins/jenkins:latest
作为基础多次重建了 docker 镜像和容器
我已经阅读并尝试了很多 StackOverflow、Github 等来自有类似问题的人的评论,建议重新启动、重建、检查权限、升级等,但没有运气,同样的问题。
不确定问题出在哪里:Angular、Docker、Jenkins、config、perms、colour-of-socks-im-wearing...非常感谢接受任何建议。
最佳答案
关于Angular Build EPERM : operation not permitted, 复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68120537/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎离题,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a minim
家庭作业 必须同时重载 operator>(istream &in, Complex &value); public: // constructor Compl
这个问题在这里已经有了答案: What are the basic rules and idioms for operator overloading? (8 个答案) 关闭 5 年前。 有什么区别
这是文档中一个不清楚的示例,使用此运算符:http://package.elm-lang.org/packages/elm-lang/core/3.0.0/Json-Decode#at 最佳答案 请注
我不明白这种行为: > sort([1,2,3,4]) ~~ sort([1,2,3,4]) False 你能给我解释一下吗? 为什么这两个列表(显然是相等的)根据 Perl 6 不相等。 更新 有趣
我正在尝试将 Ø 设为逻辑否定运算符。 ¬ True; multi sub prefix: ($n) { return not $n; } 当我运行上面的程序时,它返回以下错误: $
class Port { private: char * brand; char style[20]; // i.e., tawny, ruby, vintage int bo
早上好。我有一些问题。我有这些字段: name: "Mike", city: "NY", address: "something", pets: ["dog", "cat"] 我创建了索引 db.pe
我有以下代码使用 Javascript Webcrypto-API 解密 AES 加密数据,但它会导致“OperationError”并显示消息“操作因操作特定原因而失败”: function loa
我制作了一个自定义 Airflow 操作符,这个操作符接受一个输入,这个操作符的输出在 XCOM 上。 我想要实现的是使用一些定义的输入调用运算符,将输出解析为可在分支运算符内部调用的 Python,
int a = 1; a += ++a; cout << a << endl; // 4 int a = 1; a += a++; cout << a << endl; // 3 为什么这两个例子有不
我有这个队列的实现: #include using namespace std; template struct elem_q { T inf; elem_q* link; }; template
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我对 C++ 中的运算符重载有疑问。我有代表复数的结构,我正在重载运算符,所以我可以用复数进行计算。Visual Studio 2012 给我这个错误:1 IntelliSense:没有运算符“!=”
我正在尝试创建一个 BoolArray 类,它表示一个 bool 值数组,而不是为每个 bool 变量保存 1 个 bool 值。它使用 1 个字符变量来表示使用位的 8 个 bool 值,并节省内存
我类有 2 个运算符有点问题。 我的类(class)宣布: template class MyMap{ keyType keys[MAX]; valueType values[MAX
我有类的迭代器模板和用于 for 语句的类。 template class Itr2 { public: Itr2() { } ~Itr2() { } typedef t
Section 7.2 Enumeration declarations 没有说明任何关于 operator!=() 和作用域的 operator==()枚举。但是下面的代码可以编译。 #includ
我需要将一个 int 序列化到本地文件并将其读入内存。这是代码 #include "stdafx.h" #include #include using namespace std; int _tm
operator += 这样定义对吗?! void operator +=(const BigNumber& other) { *this=(*this) + other; } 在这样的类中:
我是一名优秀的程序员,十分优秀!