如何配置Jenkins无需Gitlab插件即可访问Gitlab私有存储库?

时间:2018-04-12 07:40:30

标签: jenkins gitlab

我已经在gitlab上的项目仓库中在ubuntu服务器和Jenkinsfile上安装了最新的Jenkins。

我可以使用Jenkins配置上的用户名/密码凭证连接到Gitlab上的私人仓库,而无需使用Jenkins Gitlab插件。这对我来说似乎不安全。如何在不使用Jenkins Gitlab插件的情况下使用Gitlab API令牌代替Jenkins的用户名/密码来访问远程私有Gitlab仓库。另一个选择是在Jenkins服务器上设置ssh私钥以防止Gitlab repo。这个选项可以吗?

Jenkins Gitlab插件未得到官方支持且维护得不好,因为Gitlab希望客户使用他们自己的CI / CD解决方案,以便出于营销原因将客户与他们的平台联系起来。

1 个答案:

答案 0 :(得分:0)

一种相对安全的方法是在Jenkins中存储凭据,即存储凭据(在JenkinsFile中不必包含凭据),并使用部署令牌(适用于Gitlab 10.7及更高版本) )的相关存储库。该令牌使您可以提供对存储库的只读权限。

步骤1-在GitLab中设置部署令牌

From the GitLab documentation

  

您可以从项目的设置中创建任意数量的部署令牌:

     
      
  1. 登录到您的GitLab帐户。
  2.   
  3. 转到您要为其创建部署令牌的项目。
  4.   
  5. 转到设置>存储库
  6.   
  7. 点击部署令牌部分上的“扩展”。
  8.   
  9. 选择令牌的名称和有效期。
  10.   
  11. 选择所需的范围。
  12.   
  13. 点击创建部署令牌
  14.   
  15. 将部署令牌保存在安全的地方。离开或刷新页面后,您将无法再次访问它。
  16.   

步骤2-将部署令牌保存在Jenkins的凭据系统中

由于部署令牌具有用户名和密码,因此请在以下步骤中选择该用户名和密码。写下您将在此步骤中使用的id(请参见下文),因为您在管道声明中将需要它。

From the Jenkins documentation

  

要将新的全局凭据添加到您的Jenkins实例:

     
      
  1. 如果需要,请确保您已登录Jenkins(具有 Credentials> Create 权限的用户)。
  2.   
  3. 从Jenkins主页(即Jenkins经典UI的仪表板)中,单击左侧的 Credentials> System
  4.   
  5. 系统下,单击全局凭据(不受限制)链接以访问此默认域。
  6.   
  7. 点击左侧的添加凭据注意:如果此默认域中没有凭据,您还可以单击“添加一些凭据”链接(与单击“添加凭据”链接相同)。
  8.   
  9. 种类字段中,选择要添加的凭据类型。
  10.   
  11. 范围字段中,选择以下任一项:      
        
          
    • 全局-如果要添加的凭据是针对管道项目/项目的。选择此选项会将凭据的范围应用于管道项目/项目“对象”及其所有后代对象。
    •     
    • 系统-如果要添加的凭据是让Jenkins实例本身与系统管理功能(例如,电子邮件身份验证,代理连接等)交互的,则选择凭据的范围仅限于单个对象。
    •     
      
  12.   
  13. 将凭据本身添加到所选凭据类型的相应字段中:      
        

    (...)

             
          
    • 用户名和密码-在相应的字段中指定凭据的用户名密码。     (...)
    •     
      
  14.   
  15. ID 字段中,指定有意义的凭据ID值-例如,jenkins-user-for-xyz-artifact-repository。您可以使用大写或小写字母作为凭据ID,以及任何有效的分隔符。但是,为了使您的Jenkins实例上的所有用户受益,最好使用单一且一致的约定来指定凭据ID。 注意:此字段是可选的。如果未指定其值,Jenkins将为凭证ID分配一个全局唯一ID(GUID)值。请记住,一旦设置了凭据ID,就无法再更改。
  16.   
  17. 为凭证指定一个可选的说明。
  18.   
  19. 点击确定以保存凭据。
  20.   

第3步-在管道声明中使用凭据

您可以像下面这样使用jenkinsFile中的凭据:

pipeline {
  stages {
    stage('Clone stage') {
       steps {
         git url: 'https://gitlab.com/[username]/[my-repo].git', branch: 'master', credentialsId: 'my-gitlab-repo-creds'
       }
    }
  }    
}

在上面的示例中,我假设您在步骤2中选择了ID my-gitlab-repo-creds