Maven在gitlab中发布

7 git maven maven-release-plugin gitlab-ci

我们正在尝试使用maven执行maven版本.我们使用gitlab作为CI工具.问题是当我们尝试执行maven发布时,maven无法将pom.xml更新到下一次迭代.

谷歌对我的问题没有答案.我试过的是: - 试图检查试图推送的用户的权限(在回购中具有主访问权限并且分支受到保护) - 主人有权访问我的仓库中的受保护分支.

下面是我的.gitlab-ci.yml文件 -

    Maven_Release:
    stage: Maven_Release
    image: maven_Build:Latest
    script:
    - git config --global user.name "username"
    - git config --global user.email "Email"
    - git checkout -f master
    - git remote set-url origin https://gitlab.com/test1/project/${CI_PROJECT_NAME}.git
    - mkdir -p ~/.ssh
    - echo "$SSH_PRIVATE_KEY" > /root/.ssh/id_rsa
    - ssh-keyscan -p 10022 gitlab.com >> ~/.ssh/known_hosts
    - mvn -B -s settings.xml -DdeployAtEnd=false -Dmaven.site.deploy.skip=true -Dresume=false -DautoVersionSubmodules=true -DdryRun=false -Djsse.enableSNIExtension=false -Dmaven.test.skip=true -DreleaseVersion=1.0.0 -DdevelopmentVersion=1.0.1 -DskipITs -DscmCommentPrefix="[ci skip]" release:prepare release:perform
    when: manual
    only:
    - master
Run Code Online (Sandbox Code Playgroud)

我试图运行这个工作,它能够部署,标记版本,但由于以下错误,它无法将pom.xml版本更改为下一次迭代,

    [INFO] Checking in modified POMs...
    [INFO] commit done: [ci skip]prepare release REL_xxxxx
    [INFO] push changes to remote... refs/heads/master:refs/heads/master
    [INFO] fetch url: https:/usrname:password@gitlabt.com/test/project/projectname.git
    [INFO] push url: https:/usrname:password@gitlabt.com/test/project/projectname.git
    [INFO] REJECTED_OTHER_REASON - RemoteRefUpdate[remoteName=refs/heads/master, REJECTED_OTHER_REASON, (null)...xx3xxx9c7cdc6dxx, fastForward, srcRef=refs/heads/master, message="pre-receive hook declined"]
    [INFO] Tagging release with the label REL_xxxxx...
    [INFO] push tag [REL_xxxxxx] to remote...
    [INFO] fetch url: https:/usrname:password@gitlabt.com/test/project/projectname.git
    [INFO] push url: https:/usrname:password@gitlabt.com/test/project/projectname.git
    [INFO] OK - RemoteRefUpdate[remoteName=refs/tags/REL_xxxxx, OK, (null)...c5ce4d1fdf5f0a9415d9f02a48aab4f536eab52c, fastForward, srcRef=refs/tags/REL_xxxxx, message=null]
    [INFO] Transforming 'project name'...
    [INFO] Transforming 'Rproject'...
    [INFO] Transforming 'project'...
    [INFO]   Updating project name to xxx-SNAPSHOT
    [INFO] Not removing release POMs
    [INFO] Checking in modified POMs...
    [INFO] commit done: [ci skip]prepare for next development iteration
    [INFO] push changes to remote... refs/heads/master:refs/heads/master
    [INFO] fetch url: https:/usrname:password@gitlabt.com/test/project/projectname.git
    [INFO] push url: https:/usrname:password@gitlabt.com/test/project/projectname.git
    [INFO] REJECTED_OTHER_REASON - RemoteRefUpdate[remoteName=refs/heads/master, REJECTED_OTHER_REASON, (null)...1xxxxx541baf208dxxxd, fastForward, srcRef=refs/heads/master, message="pre-receive hook declined"]
    [INFO] Release preparation complete.
    [INFO] 
    [INFO] --- maven-release-plugin:2.5.1:perform (default-cli) @ mobile-interface-parent ---
Run Code Online (Sandbox Code Playgroud)

非常感谢您的意见和帮助!

Von*_*onC 6

你开始:

mkdir -p ~/.ssh
echo "$SSH_PRIVATE_KEY" > /root/.ssh/id_rsa
ssh-keyscan -p 10022 gitlab.com >> ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

这非常适合提供具有开发人员权限的正确 SSH 密钥以推回 GitLab 存储库(或具有相同权限的部署密钥)

但是……你不用它!

git remote set-url origin https://gitlab.com/test1/project/${CI_PROJECT_NAME}.git
Run Code Online (Sandbox Code Playgroud)

那是一个 https URL,而不是一个 SSH URL(ssh://git@gitlabt.com/test/project/projectname.git或git@gitlabt.com:test/project/projectname.git)。

(我假设gitlabt.com是一个错字,你实际上看到了gitlab.com)

任何 https URL 都将使用git config credential.helper具有为该 URL 记忆的凭据的 。这些凭据可能不是允许mvn release:prepare推回 GitLab 存储库的正确凭据。

检查pom.xml:它可以把它的URL来mvn release与scm部分:

<scm>
  <developerConnection>scm:git:ssh://git@gitlab.com:/test1/project/${CI_PROJECT_NAME}.git</developerConnection>
</scm> 
Run Code Online (Sandbox Code Playgroud)

developerConnection如果您希望您~/.ssh/id_rsa真正有用,请确保其中有一个 SSH URL 。


该OP潘迪确认的评论:

我给出了不同的电子邮件 ID。但是 maven 无法找出确切的问题,并给出了“ REJECTED_OTHER_REASON - RemoteRefUpdate”。
因此,我尝试提供其他电子邮件 ID,并且效果很好。

另外,在 GitLab 中,我尝试修改 push rules :::: project settings>Repository>push Rules。
如果我们需要使用不同的电子邮件地址,我也删除了提交者限制。