【问题标题】:How to checkout git repo with an specific revision in Jenkins如何在 Jenkins 中使用特定修订版签出 git repo
【发布时间】:2021-04-30 08:42:18
【问题描述】:

我正在使用 git、s3 和 aws-codedeploy 运行 Jenkins。用于在 s3 上部署构建应用程序,并触发 aws codedeploy 以进行后期部署过程。 上述设置运行良好。

每当我运行 jenkins 作业时都会遇到问题,我的作业总是克隆 git repo,然后将构建/内容的 zip 上传到 s3,然后 aws-codedeploy 在我的服务器上部署完整的 zip。

但是我希望当我运行 jenkin 作业时,它只需要特定的 git 修订克隆而不是完整的内容,并且只使用它来构建部署。

请帮助我解决上述问题。提前谢谢...

【问题讨论】:

    标签: git jenkins aws-code-deploy


    【解决方案1】:

    由于 git 将任何分支视为提交的指针,您可以在分支说明符中指定提交。

    编辑(回复评论): 你所谓的分支,实际上只是一个指向特定提交的指针。 Git 没有 svn 之类的分支;因此,如果你想部署一个特定的提交,你只需提供它。

    我了解您不想在每次需要构建它时都换工作。你可以构建parametrized 然后use the parameter as branch specifier

    【讨论】:

    • 感谢您的回答,但我想从分支构建特定的提交,就像在“分支说明符”中我给出 */master 但我想使用特定的提交/修订 ID 进行部署。
    • 你能在管道上做到这一点吗?我已经尝试提供完整的 sha 并继续没有找到任何修订。我认为 GitScm 插件只是为标签/分支提取引用并且不支持所有提交 id,即使它的 javadoc 说它可以做到这一点
    • 我没有实际尝试过,但应该可以。有没有试过的代码 sn-p?
    • @PeterKahn 你需要指定一个有效的 refspec,否则 Jenkins 会尝试使用参数字符串而不扩展它,它会失败。为 refspec(在 Advanced 下)指定有效的内容,例如 `+refs/heads/master:refs/remotes/origin/master`,然后在“Additional Behaviours”下添加“Advanced clone behavior”并检查“Honor refspec on initial clone”选项。然后 Jenkins 将使用有效的 refspec 进行 git fetch,然后使用扩展的参数值进行 checkout。
    【解决方案2】:

    Pre StepsExecute shell下添加这个脚本:

    # update the local git repository
    git fetch 
    
    # pull the desired branch
    git pull origin <branch>
    
    # checkout the specific commit you want.
    git checkout <commit version>
    

    【讨论】:

      【解决方案3】:

      我正在使用 Jenkins 流水线

      我可以部署旧提交(任何旧提交),只需在 gitlab docker 映像中运行 checkout,然后再部署:

      node {
      stage('checkout') {
          checkout scm
      }
      
      docker.image('docker.io/gitlab/gitlab-ce').inside('-u root -e MAVEN_OPTS="-Duser.home=./"') {
          stage('git checkout') {
              sh 'git checkout ${REV_VER}'
              }
      }
      

      在此之后,我使用任何其他 docker 映像进行构建和部署。

      例子:

      docker.image('openjdk:8').inside('-u root -e MAVEN_OPTS="-Duser.home=./"') {
              stage('build') {
                  build process*
              }
              stage('deploy') {
                  deploy process*
              }
      }
      

      REV_VER,这是 Jenkins 配置中的字符串参数。

      默认变量 - REV_VER(在 Jenkins 配置中) - 开发(我的工作分支)。

      但如果您需要部署任何旧提交,只需在运行“使用参数构建”时更改字符串 REV_VER 中短 ID 提交的变量(如“5221e28”)

      附言OMG,我希望你能理解我写的东西,因为我的英语很糟糕=)

      祝你好运

      【讨论】:

        【解决方案4】:

        根据git插件的文档:

        注意:结帐步骤是首选的 SCM 结帐方法。它提供了比 git 步骤更多的功能。

        按照上面的说明,我使用带有凭据的checkout 制作了版本:

        def branchDeployName = 'd5e043c80b51067c397ae12567005efde5b2517f' //commit ID
        /*or simply*/
        //def branchDeployName = '*/master' //branch name
        checkout([
          $class: 'GitSCM', 
          branches: [[name: branchDeployName]], 
          doGenerateSubmoduleConfigurations: false, 
          extensions: [], 
          submoduleCfg: [], 
          userRemoteConfigs: [
            [credentialsId: 'ac3a0ae1-d3aa-1111-ac70-cba42f82e760', 
             url: 'https://bitbucket.org/user/repo.git']
          ]
        ])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-03
          • 2013-05-12
          • 2018-02-13
          相关资源
          最近更新 更多