我正在尝试让 Bitbucket Pipelines 执行定义部署区域的多个步骤。当我这样做时,我收到错误
配置错误 bitbucket-pipelines.yml 文件中的部署环境“暂存”在管道中多次出现。请参阅我们的文档了解有效环境及其顺序。
据我了解,部署变量必须逐步发生。
我如何设置此示例管道文件才不会遇到该错误?
image: ubuntu:18.04
definitions:
steps:
- step: &build
name: npm-build
condition:
changesets:
includePaths:
# Only run npm if anything in the build directory was touched
- "build/**"
image: node:14.17.5
script:
- echo 'build initiated'
- cd build
- npm install
- npm run dev
- echo 'build complete'
artifacts:
- themes/factor/css/**
- themes/factor/js/**
- step: &deploychanges
name: Deploy_Changes
deployment: Staging
script:
- echo 'Installing server dependencies'
- apt-get update -q
- apt-get …Run Code Online (Sandbox Code Playgroud) 当我使用 bitbucket 管道调用锚点时,我想发送参数
这是我正在使用的文件,我必须调用,after-script因为我需要推送到某个 S3 存储桶
definitions:
steps:
- step: &node-build
name: Build React app
image: node:lts-alpine
script:
- npm install --no-optional
- npm run build
artifacts:
- build/**
- step: &aws-ecr-s3
name: AWS S3 deployment
image: amazon/aws-cli
script:
- aws configure set aws_access_key_id "${AWS_KEY}"
- aws configure set aws_secret_access_key "${AWS_SECRET}"
pipelines:
branches:
master:
- step: *node-build
- step:
<<: *aws-ecr-s3
after-script:
- aws s3 cp ./build s3://my-app-site-dev --recursive
staging:
- step: *node-build
- step:
<<: *aws-ecr-s3
after-script: …Run Code Online (Sandbox Code Playgroud) yaml arguments bitbucket amazon-web-services bitbucket-pipelines
Node.js 从版本 14 更新到版本 16 后,我们在 bitbucket CI/CD 管道上进行了大量失败的测试。本地测试通过。
似乎是计时器中的问题,因为第一条错误消息显示:“FakeTimers:调用clearTimeout来清除本机计时器而不是此库创建的计时器。要自动清理本机计时器,请使用shouldClearNativeTimers“。之后,一系列测试都失败了。
在为笑话添加“--runInBand”参数后,它解决了问题,但这不是一个理想的方法。
将不胜感激任何帮助。
我们在 CI 中使用 Bitbucket 管道进行测试,我们的应用程序是 NestJS,并使用 Jest 测试了 Typescript。
我们总是让所有测试都运行,但是从现在开始的几天(2022 年 5 月)测试在一些套装后会卡住,测试卡住的套件是相当随机的。
测试不会失败,我们没有任何内存警告或其他任何东西,它只是卡在管道上。我们需要停止管道,因为它永远不会停止。
不幸的是,我们没有发现任何错误,需要进一步调查。
我们可以做什么来检查更多细节?
我在发布之前正在搜索,但似乎VS2017停止使用project.json而是使用.csproj文件,因此当我尝试在TFS或BitBucket上运行构建时,我得到失败,因为构建正在寻找project.json.具体来说,BitBucket管道会告诉我它无法在.Net Core项目中找到project.json.在我可以简单地运行构建之前没有问题.
我是所有这一切的新手所以这是我必须改变或设置在.yml中的东西吗?或者这是BitBucket必须在他们的.Net Core管道中改变的东西?
感谢您的帮助.
bitbucket schema.yml project.json asp.net-core bitbucket-pipelines
mysql:5.7尝试使用 Bitbucket Pipelines设置 docker 映像的默认字符集和排序规则,文档提到得有点含糊:
如果需要进一步配置底层数据库引擎,请参考Docker Hub官方镜像。
bitbucket 文档发送给您的这个页面表明这是可能的......至少通过 docker:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
所以我的问题是如何传递这些参数:--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
我见过人们command:在 YML 中使用 bitbucket-pipelines 参数,但是 bitbucket 上的管道配置编辑器说它在那里无效:
definitions:
services:
mysql:
image: mysql:5.7
command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']
ports:
- "3306:3306"
variables:
MYSQL_DATABASE: $MY_DATABASE
MYSQL_ROOT_PASSWORD: $MY_PW
Run Code Online (Sandbox Code Playgroud) 对于我的一个存储库,我需要查看我设置为部署的安全属性的值(按照https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets/#Secured-中所述创建)变量)。有什么方法可以检索那里存储的值吗?
由于它的所有出现都被屏蔽(https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets/#Secured-variable-masking),我有写一个值的想法,我怀疑我保存了在那里,使用“回声”。如果我看到它在日志中被变量替换,我就知道它是该变量的秘密值 - 但这会将其暴露给我的项目的历史记录。
还有其他想法吗?
Bitbucket Pipelines使用Docker容器来执行任务,默认情况下Docker容器以root身份运行.这是NPM生命周期脚本的问题,因为NPM在运行脚本时尝试降级其权限.
当执行postinstall脚本,NPM抛出一个错误,它cannot run in wd %s %s (wd=%s).最简单的解决方案是使用--unsafe-perm标志运行npm install ,但我不喜欢这种方法.
Docker 编写Dockerfiles 的最佳实践表明:
如果服务可以在没有权限的情况下运行,请使用USER更改为非root用户.
配置典型的Docker容器时,我会创建一个新的非root用户并以此用户身份运行我的npm脚本.
阅读Pipelines文档后,我找不到任何与Docker的USER命令等效的内容.我也许能使用useradd,chown并且su(没有测试尚未),但有一个简单的解决方案?
不幸的是增加useradd,chown而su到bitbucket-pipelines.yml脚本部分管道破裂,并导致失败的repo:push网络挂接.
image: node:6.2
pipelines:
default:
- step:
script:
- useradd --user-group --create-home --shell /bin/false node
- chown -R node: /opt/atlassian/bitbucketci/agent/build
- su -s /bin/sh -c "npm install" node
- su -s /bin/sh -c …Run Code Online (Sandbox Code Playgroud) continuous-integration bitbucket node.js docker bitbucket-pipelines
我想在两个步骤中共享一个变量。
我将其定义为:
- export MY_VAR="FOO-$BITBUCKET_BUILD_NUMBER"
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在其他步骤中打印它时:
- echo $MY_VAR
Run Code Online (Sandbox Code Playgroud)
它是空的。
我如何共享这样的变量?
我在 CI 环境中运行 e2e 测试,但我看不到管道中的工件。
bitbucket-pipelines.yml:
image: cypress/base:10
options: max-time: 20
pipelines:
default:
-step:
script:
- npm install
-npm run test
artifacts:
-/opt/atlassian/pipelines/agent/build/cypress/screenshots/*
-screenshots/*.png
Run Code Online (Sandbox Code Playgroud)
也许我输入了错误的路径,但我不确定。
有人知道我做错了什么吗?
bitbucket ×7
docker ×2
jestjs ×2
node.js ×2
arguments ×1
artifact ×1
asp.net-core ×1
cicd ×1
mysql ×1
nestjs ×1
project.json ×1
schema.yml ×1
security ×1
ts-jest ×1
yaml ×1