补丁版本、标记、添加、提交和推送的命令

A command to patch version, tag, add, commit and push

我想编写一个 cli 命令来集成我在 (react-js) 项目上完成本地工作会话时必须执行的所有操作:

推送到远程(例如 github 或 gitlab)也将启动 CI/CD 构建。

我到现在为止想到的是这样丑陋的东西:

m="debugging tag & version"; npm version --no-git-tag-version --force patch && git add . && git commit -m "$m" && git tag -a v`node -p "require('./package.json').version"` -m "$m" && git pull --no-edit && git push --follow-tags

这个的主要缺点是它强制在远程上进行双重构建,可能是因为它推送了两次......但我不明白为什么,因为我不深入了解所有感兴趣的命令。

你能给我一些建议来纠正我的解决方案,或者建议不同的策略吗?

UPDATE:我在这里包含了我的 GitLab 的 CI 配置文件 (.gitlab-ci.yml),它可以是任何帮助...

variables:

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - node_modules/

build site:
  image: node:12
  stage: build
  script:
    - yarn install --no-progress 2> >(grep -v warning 1>&2)
    - yarn build
  artifacts:
    expire_in: 1 week
    paths:
      - build/

# we test only on master branch to speed up CI/CD while developing, for the moment...
unit test:
  image: node:12
  stage: test
  only: 
    - master
  script:
    - yarn install --no-progress 2> >(grep -v warning 1>&2)
    - yarn test

# we only deploy on master and developing branches; for other feature branches,
# we work locally only and then merge into developing or master.
deploy:
  image: alpine
  stage: deploy
  only: 
    - master
    - developing
  before_script:
    - apk add --no-cache rsync openssh sshpass
  script:  
    - if [ -z "$CI_COMMIT_BRANCH" -o "$CI_COMMIT_BRANCH" = "master" ]; then DEPLOY_PATH="marketplace"; else DEPLOY_PATH="marketplace.test"; fi
    - echo "On branch $CI_COMMIT_BRANCH, deploying to $DEPLOY_PATH"
    - sshpass -p $DEVEL_PASS rsync -az --delete --no-perms --no-g -O -e "ssh -o StrictHostKeyChecking=no" build/ $DEVEL_USER@$SERVER_NAME:/var/www/$DEPLOY_PATH/
 

git push 推送分支并提交。最重要的是 --follow-tags 推送指向推送提交的标签。

每个 CI 假设代码的行为与标签相关。即使代码完全相同,CI 配置中的代码也会检查当前提交是否已标记并执行某些操作,通常是发布包。

因此,默认情况下,每个 CI 对每个带有标签的推送执行至少两次 运行——每个分支一个(有些配置为 运行 测试每个新的推送提交,因此整个 运行 计数可能会更高)并且每个标签一个。

如果您完全确定即使有标签,您的代码也能正常运行,您可以在 CI 配置中禁用带有标签的单独 运行。通常的方法是只允许在分支上进行 CI 运行 测试。你没有命名你的CI所以我不能给出更具体的建议。