如何从 bitbucket-pipelines.yml 执行 git push?

Posted

技术标签:

【中文标题】如何从 bitbucket-pipelines.yml 执行 git push?【英文标题】:How to do git push from bitbucket-pipelines.yml? 【发布时间】:2017-12-04 01:49:42 【问题描述】:

我有一个节点项目。我想做的是在开发人员签入(提交和推送)时,我想运行 bitbucket 管道,该管道将在内部执行以下操作

    npm install 和 npm test npm 版本补丁(增加 package.json 中的版本) git push origin master --follow-tags npm 发布

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”上遇到问题。如何授予管道推送回存储库的权限?

我还想知道这是否会触发一个循环,因为我增加了 package.json 版本并进行了签入(提交和推送),我的 bitbucket 管道再次执行?

使用 bitbucket-pipelines 在 nodejs 项目上使用版本号递增执行 CI/CD 的推荐方法是什么?

干杯, 罗希特

【问题讨论】:

要添加@crazko 答案,您可以在提交消息中的任何位置添加“[skip ci]”或“[ci skip]”,构建将不会运行 【参考方案1】:

我遇到了类似的问题,虽然与 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,方法是将 custom 部分添加到配置中。

最终,由于缺乏自动化,我放弃了用管道推回某些东西的整个想法。

更新

现在,schedule builds 也有可能。有了这个功能,也可以避免重复触发。

【讨论】:

如果您在提交消息中的任何位置包含 [skip ci] 或 [ci skip],则不应重新触发构建 (confluence.atlassian.com/bitbucket/…) @crazko 如何配对连接到我的帐户的自己的 SSH 密钥? @AlejandroCotilla - 我的意思是在 SSH 密钥 下 bitbucket.org/account 的帐户设置中添加的任何 SSH 密钥 @crazko - 是的,我知道你的意思,你的回答是我遇到的问题的解决方案,但我问我如何将我自己的帐户私有 ssh 密钥添加到 Docker 容器,但我想通了,我将它添加到 Docker 映像中,并且我的 Dockerfile 中有一个脚本,用于在管道运行时将 ssh 密钥复制到容器中。【参考方案2】:

遇到了同样的问题,并希望对此进行扩展,以包括面临 NPM 以外的私有仓库的场景。它看起来很乱,如果有人有更好的方法,请随时纠正。您需要自定义 .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

【讨论】:

以上是关于如何从 bitbucket-pipelines.yml 执行 git push?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数

如何从 Firebase 获取所有设备令牌?

如何直接从类调用从接口继承的方法?

如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个

如何从Mac从android studio中的fabric注销? [复制]

如何从设备中获取 PDF 文件以便能够从我的应用程序中上传?