Gitlab 合并期间保持package.json版本不变

Gitlab 合并期间保持package.json版本不变,gitlab,Gitlab,在将“feature”分支合并到“dev”之后,我需要找到一种方法,使“dev”分支的package.json中的“version”保持不变。我想不出最好的办法。 我可以只使用.gitlab-ci.yml或bash脚本和gitlab-yml的组合来实现这一点吗。注意,package.json中的“feature”分支的“version”总是与dev的package.json不同 我尝试使用bash并为package.json“version”分配一个变量,然后在合并后使用预合并版本更新packa

在将“feature”分支合并到“dev”之后,我需要找到一种方法,使“dev”分支的package.json中的“version”保持不变。我想不出最好的办法。 我可以只使用.gitlab-ci.yml或bash脚本和gitlab-yml的组合来实现这一点吗。注意,package.json中的“feature”分支的“version”总是与dev的package.json不同

我尝试使用bash并为package.json“version”分配一个变量,然后在合并后使用预合并版本更新package.json。这似乎不是一个好的解决方案。

一种方法是不使用version
package.json(忽略它),而是生成它(包含正确的值)

生成脚本可以通过以下方式确定签出分支的名称:

branch=$(git rev-parse --symbolic --abbrev-ref HEAD)
这意味着你可以:

  • 仅版本模板文件
    package.json.tpl
  • 以分支命名的版本值文件:
    version.dev
    version.feature
    :由于它们不同,因此在合并或切换分支时没有合并问题
最后,您将(在a中)注册一个

(来自“”的图像,来自“”)

与模板文件(
package.json.tpl
)关联的
smudge
脚本将通过查看右侧
版本中的值来生成(在
git签出时自动生成)实际的
package.json
文件。
值文件。
生成的实际
package.json
文件仍然被忽略(被
.gitignore

请参阅“.”中的完整示例。

一种方法是不使用版本
package.json(忽略它),而是生成它(其中包含正确的值)

生成脚本可以通过以下方式确定签出分支的名称:

branch=$(git rev-parse --symbolic --abbrev-ref HEAD)
这意味着你可以:

  • 仅版本模板文件
    package.json.tpl
  • 以分支命名的版本值文件:
    version.dev
    version.feature
    :由于它们不同,因此在合并或切换分支时没有合并问题
最后,您将(在a中)注册一个

(来自“”的图像,来自“”)

与模板文件(
package.json.tpl
)关联的
smudge
脚本将通过查看右侧
版本中的值来生成(在
git签出时自动生成)实际的
package.json
文件。
值文件。
生成的实际
package.json
文件仍然被忽略(被
.gitignore


请参见“.”中的完整示例。

以下是我的想法: My script.sh:

#!/usr/bin/env bash
echo 'Current gitlab user and email'

echo $GITLAB_USER_NAME
echo $GITLAB_USER_EMAIL

git config user.email $GITLAB_USER_EMAIL
git config user.name $GITLAB_USER_NAME
git fetch --all

git checkout $CI_COMMIT_REF_NAME

echo 'Getting version from package.json master'
git checkout origin/master -- package.json
VERSION_DEV=$(cat package.json \
| grep version \
| head -1 \
| awk -F: '{ print $2 }' \
| sed 's/[",]//g' \
| tr -d '[[:space:]]')
git status
git reset
git checkout .

echo $VERSION_DEV
echo 'replacing version in package.json'
sed -i 's/\"version\":.*/\"version\": "'$VERSION_DEV'",/g' "package.json"
git add .
git commit -m "package.json version preserved"

# Success
echo "-------------------------------------------------------------------------"
echo "Success in preserving package.json version"


echo 'Checking out master'
git checkout master

echo 'Merging into master'
git merge $CI_COMMIT_REF_NAME --no-ff --no-edit
git push --follow-tags origin  master
my.gitlab-ci.yml:

job-merge:
  before_script:
    - git remote set-url origin https://oauth2:${CI_PUSH_TOKEN}@gitlab.com/mysername/myrepo.git
  script:
    - echo 'STARTING TO RUN SCRIPTS'
    - bash ./script.sh
  only:
    - merge_requests

CI_PUSH_令牌是项目CI/CD设置中的一个变量,它是api范围内的个人访问令牌。

以下是我的想法: My script.sh:

#!/usr/bin/env bash
echo 'Current gitlab user and email'

echo $GITLAB_USER_NAME
echo $GITLAB_USER_EMAIL

git config user.email $GITLAB_USER_EMAIL
git config user.name $GITLAB_USER_NAME
git fetch --all

git checkout $CI_COMMIT_REF_NAME

echo 'Getting version from package.json master'
git checkout origin/master -- package.json
VERSION_DEV=$(cat package.json \
| grep version \
| head -1 \
| awk -F: '{ print $2 }' \
| sed 's/[",]//g' \
| tr -d '[[:space:]]')
git status
git reset
git checkout .

echo $VERSION_DEV
echo 'replacing version in package.json'
sed -i 's/\"version\":.*/\"version\": "'$VERSION_DEV'",/g' "package.json"
git add .
git commit -m "package.json version preserved"

# Success
echo "-------------------------------------------------------------------------"
echo "Success in preserving package.json version"


echo 'Checking out master'
git checkout master

echo 'Merging into master'
git merge $CI_COMMIT_REF_NAME --no-ff --no-edit
git push --follow-tags origin  master
my.gitlab-ci.yml:

job-merge:
  before_script:
    - git remote set-url origin https://oauth2:${CI_PUSH_TOKEN}@gitlab.com/mysername/myrepo.git
  script:
    - echo 'STARTING TO RUN SCRIPTS'
    - bash ./script.sh
  only:
    - merge_requests

CI_PUSH_TOKEN是项目CI/CD设置中的一个变量,它是api作用域的个人访问令牌。

@hypnobluez Great!别忘了在这里发布关于如何处理它的答案。@hypnobluez Great!别忘了在这里发布关于如何处理它的答案。