如何在bitbucket-pipelines.yml中进行git push操作?

8
我拥有一个Node.js项目。我想要做的是,当开发者提交代码(commit and push)时,我想要运行Bitbucket Pipeline,并在其中完成以下步骤:
  1. 安装npm依赖并执行npm测试
  2. 使用npm version patch命令更新package.json中的版本号
  3. 使用git push origin master --follow-tags命令将代码推送到远程仓库
  4. 执行npm publish命令发布新版本
bitbucket-pipelines.yml文件内容如下:
    image: node:8
    pipelines:
      default:
        - step:
            caches:
              - node
            script:
              - npm version patch
              - git push origin develop --follow-tags
              - npm publish

我遇到了使用“git push origin master --follow-tags”命令时的问题。我该如何授予pipeline将代码推回存储库的权限?
另外,我想知道这个操作是否会导致循环触发,因为我已经增加了package.json的版本并进行了检查(提交和推送)。
对于使用bitbucket-pipelines在nodejs项目上进行CI/CD并对版本号进行增量的方式,有哪些建议呢?
祝好, Rohit

2
要添加@crazko的答案,您可以在提交消息中的任何位置添加“[skip ci]”或“[ci skip]”,构建将不会运行。 - Aditya lohia
3个回答

8
我遇到了类似的问题,尽管与nodejs开发无关。在git push时构建失败的原因是您能够在“ Pipelines> SSH密钥”设置下生成的ssh密钥对没有写入权限。删除生成的密钥对并使用连接到您帐户的自己的密钥。您还需要在推送之前创建提交。将以下内容添加到您的bitbucket-pipelines.yml文件中:
- git config user.email <your@email>
- git add package.json
- git commit -m "updated version"

你第二个问题的答案是:是的,它会触发另一个构建,因为默认情况下每次提交都会触发。在我的情况下,后续的构建产生了完全相同的输出,这导致整个构建在git commit时失败。它与origin保持最新,因此停止了重复触发。
每次更改都有两个构建,其中一个总是失败,这并不好。解决方法可能是通过将自定义部分添加到配置中,手动运行构建running builds by hand
最终,我放弃了这个想法,推迟了一些流水线,因为缺乏自动化。

更新

现在,还有一种schedule builds的可能性。通过这个功能,也可以避免重复触发。

15
如果您在提交信息中包含 [skip ci] 或 [ci skip],则不应重新触发构建。(https://confluence.atlassian.com/bitbucket/bitbucket-pipelines-faq-827104769.html) - Tonio
@crazko 我该如何将连接到我的账户的自己的SSH密钥配对? - Alejandro Cotilla
@AlejandroCotilla - 我的意思是任何在https://bitbucket.org/account的账户设置下**SSH keys**中添加的SSH key。 - crazko
@crazko - 是的,我知道你的意思,你的答案解决了我遇到的问题,但我想问的是如何将我的账户私有ssh密钥添加到Docker容器中,但我已经解决了这个问题,我将它添加到了Docker镜像中,并在我的Dockerfile中编写了一个脚本,在流水线运行时将ssh密钥复制到容器中。 - Alejandro Cotilla

2

我遇到了同样的问题,并希望扩展一下,包括面对除 NPM 之外的私有 repo 的情况。这看起来很混乱,如果有更好的方法,请随意纠正。您需要一个自定义的 .npmrc 来添加自定义的 npm 注册表。然后在添加新版本后需要清理所有内容。

以下场景是将 Node 应用程序放置在 VSTS 包中。

           script:
                - mv .npmrc_config .npmrc
                - git config --global push.default simple
                - git remote set-url origin https://${AUTH_STRING}@bitbucket.org/${COMPANY}/${REPO}.git
                - git config --global user.email "<YOUR EMAIL>"
                - git config --global user.name "<YOUR USERNAME>"
                - git add .npmrc
                - git rm .npmrc_config
                - git commit -m "[skip CI]"
                - git push origin master
                - npm install
                - npm version patch
                - git push origin master --follow-tags
                - npm publish
                - mv .npmrc .npmrc_config
                - git add .npmrc_config
                - git rm .npmrc
                - git commit -m "[skip CI]"
                - git push origin master

1
为了推送到一个仓库,你需要具有写入权限。实现这个目标的一种方式是使用访问令牌
这将为你提供一个访问令牌和一个邮件地址,你可以使用它们来拉取/推送代码到一个仓库:
# Setup git
- git config --global user.email "${TOKEN_MAIL}"

# Clone the repo
- git clone https://x-token-auth:${ACCESS_TOKEN}@bitbucket.org/your/repo.git

# Git add, commit and push
- git add .
- git commit -m "Updated version"
- git push


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接