返回文章列表
CTO | 开发 | 运维 | 安全 | 测试 2024-03-21

让 Jenkins 到极狐GitLab 的迁移变得更加简单

极狐GitLab

学习为什么以及如何遵循下面的这份指南,轻松地从Jenkins 迁移到极狐GitLab。

 

 

极狐GitLab是最全面的 AI 驱动的 DevSecOps 平台。这意味着极狐GitLab提供了单一应用内具备规划、开发和交付安全软件所需的一切能力。

 

平台消除了在整个软件开发生命周期(SDLC)中集成各种工具时所带来的痛苦和挣扎。由于 Jenkins 不是一个平台,因此需要额外的工具才能完成 SDLC。这种 DIY DevOps 方法引入了工具链复杂性,带来以下缺点:

 

  • 需要自定义支持来整合和编排工具
  • 难以维护/升级/保护单独的工具
  • 测量组织转型效率低
  • 开发人员体验较差
  • 需要额外的管理/时间/预算成本
  • 生产力下降
  • 上下文切换和协作低效

自助式DevOps与DevSecOps平台

 

基于这些原因,许多 Jenkins 团队正在考虑迁移到极狐GitLab DevSecOps 平台。如果您正在寻找更强大、可靠和安全的解决方案,极狐GitLab是您最佳选择!极狐GitLab可免费开始使用,并根据您组织的需求提供不同的订阅计划。要了解更多关于我们的产品和功能,查看我们的定价页面

 

 

 在这篇博客中,您将了解到:

 

 

  • 如何规划迁移
  • 如何从其他源代码管理(SCM)工具迁移仓库到极狐GitLab
  • 如何将 Jenkins 中的 CI/CD 流水线迁移到极狐GitLab
  • 其他迁移考虑事项

 

迁移规划

 

在从其他工具迁移到极狐GitLab CI/CD之前,您应该首先制定一个迁移计划。迁移计划是一个重要的技术步骤,用于设定期望。CI/CD 工具在方法、结构和技术细节上有所不同,这意味着迁移并非只是数据的一对一映射。一个迁移计划将带来以下好处:

 

 

  • 设定并传达清晰的迁移目标,帮助您的用户了解为什么这项工作值得。价值在工作完成时是清晰的,但在进展中人们也需要意识到价值。
  • 从相关领导团队获得支持和对齐,有助于上面提到的一点。
  • 花时间教育用户不同之处。
  • 找到一些方法来安排或延迟迁移的部分,并防止非迁移(或部分迁移)状态时间过长。
  • 记录极狐GitLab CI/CD 提供的改进优势,并将其作为过渡的一部分更新您的实现。

 

 

一个迁移计划将使您能够建立一个流程,使您可以在最小化干扰的情况下慢慢迁移到极狐GitLab。这可能包括在某些项目被移至极狐GitLab 并从 Jenkins 中卸载时同时运行 Jenkins 和极狐GitLab。

 

定义变更管理流程

 

迁移计划应该定义一个有效的变更管理流程。开发人员、IT运营人员、云管理员、安全人员和质量工程师可能没有使用极狐GitLab的经验,他们可能不知道您或您的领导为什么决定朝这个方向发展。

 

受到影响的人需要知道:

 

  • 为什么要进行变更
  • 未来状态是什么样
  • 公司打算如何从当前状态达到目标状态
  • 哪里获取更多信息或帮助

 

 

 为此,您应考虑以下步骤来管理这些职能角色之间的变更:

 

 

  • 分析当前状态:记录当前流程的当前状态。收集指标作为基准。通过与关键团队成员的访谈,识别CI/CD 中的有效和无效之处。记录您发现的挑战,无论是定量还是定性的。您将不得不为更改的愿景和原因进行推销,因此您能够清晰定义问题集合时,更容易获得全公司的认可。
  • 建立愿景:现在您已经定量地概述了当前的问题点并且有了基准度量和定性描述(根据团队成员的说法),传达未来状态的愿景。解释为什么这很重要(将其与业务成功指标联系起来)。展示当前状态和理想状态的实时和记录演示。通过多个渠道和媒体强化这一信息——聊天群、全员会议、电子邮件通知、在极狐GitLab 上的横幅通知等。
  • 教育员工:投资于由极狐GitLab 专家提供的极狐GitLab CI/CD 培训。使用极狐GitLab 认证衡量知识的掌握和保留。
  • 传达路线图和资源:向团队成员传达预期的时间表,提供可以帮助他们过渡的可用资源,并介绍像聊天群、论坛、或极狐GitLab 影响者上班时间等社区资源,以供他们提问获取帮助。为鼓励团队早期过渡并与同行应用组分享经验而建立奖励系统,以赚取额外积分!

 

    如果在开始这个过渡时拥有这些要素,您将建立成功的框架。

 

建立迁移目标

 

在执行迁移之前,您应该充分了解您的目标以及如何实现它们。例如,您应该能够回答以下一些问题:

 

 

  • 您的迁移时间表是什么?
  • 您的 Jenkins 服务器目前是如何配置的?
  • 必须迁移多少个项目?
  • 您的流水线有多复杂?
  • 它是否需要外部依赖、多个流水线触发器、并行构建等?
  • 您的代码是如何部署的?在哪里部署?
  • 部署代码的发布/审查过程是什么样的?
  • 它是集成到 Jenkins 中还是由 Jenkins 触发的独立工作流程?
  • 哪些构建制品或二进制文件对于流水线成功是必需的?
  • Jenkins 作业都使用了哪些插件?
  • Jenkins 代理上安装了哪些软件?
  • 您目前使用的 SCM 解决方案是什么?
  • 您的 Jenkins 作业中是否使用了共享库?
  • Jenkins 使用了哪种身份验证方法(基本身份验证、LDAP/AD、SSO)?
  • 您是否需要从流水线访问其他项目?
  • Jenkins 中是否有用于访问外部服务的凭证?

 

 

通过回答这些问题,您将了解如何进行迁移、需要多长时间以及从何处开始。一旦建立了计划并且有了明确的期望和可能的风险,您就可以开始迁移过程。

 

迁移的先决条件

 

一旦您制定了迁移计划并解决了所有迁移的期望,您就可以开始设置极狐GitLab。以下是建议的迁移先决条件:

 

 

  • 熟悉极狐GitLab。了解关键的极狐GitLab CI/CD功能。
  • 按照教程创建您的第一个极狐GitLab 流水线以及更复杂的流水线,用于构建、测试和部署静态站点。
  • 查看 .gitlab-ci.yml  关键字参考。
  • 设置和配置极狐GitLab。
  • 测试您的极狐GitLab实例。

 

 

一旦您了解了极狐GitLab 并且实例已经配置好,您就可以按照迁移计划进行工作,并开始将项目从 Jenkins 迁移到极狐GitLab。确保您的极狐GitLab 实例已经根据极狐GitLab 最佳实践和参考架构进行正确设置。

 

迁移仓库至极狐GitLab

 

Jenkins 的一个主要缺点是它没有提供 SCM 解决方案。如果您使用 Jenkins,您的代码必须存储在一个独立的 SCM 解决方案中,而 Jenkins 必须能够访问该解决方案。因为极狐GitLab内置了SCM,从 Jenkins 迁移也意味着您可以迁移您之前使用的 SCM 解决方案,从而进一步降低成本。

 

极狐GitLab提供了工具,让您可以轻松将存储库及其元数据迁移到极狐GitLab。以下导入工具可帮助您将项目迁移到GitLab:

 

GitHub 到极狐GitLab 仓库导出器

 

每个导入工具会从项目中导入不同的数据。阅读导入和迁移项目的文档,以了解有关提供的导入工具的更多信息,查看哪些数据被迁移到极狐GitLab。此外,您可以自动化组和项目的导入,并构建定制解决方案,以进一步满足您组织的需求:

 

专业服务

 

如何迁移代码仓库

 

使用我们内置的导入工具,将存储库迁移到极狐GitLab非常简单。在这个示例中,我将演示如何将 GitHub中的代码库及其资源(问题、拉取请求、里程碑等)复制到极狐GitLab。要将存储库从 GitHub 迁移到极狐GitLab,可以按照以下步骤操作:

 

在左侧边栏顶部,选择创建新的项目(+)。

在极狐GitLab部分下选择新项目/仓库。

选择导入项目。

 

选择导入项目

 

1、点击 GitHub 按钮。

  • 如果使用极狐GitLab 私有化部署,那么您必须启用 GitHub 导入器。
  • 请注意,其他导入器也可以以相同的方式启动。

2、现在您可以选择:

  • 使用GitHub OAuth授权:选择“使用GitHub授权”。
  • 或使用GitHub个人访问令牌:
    • 前往https://github.com/settings/tokens/new。
    • 在备注字段中,输入令牌描述。
    • 选择repo范围。
    • 可选的导入协作者,选择read:org范围。
    • 点击“生成令牌”按钮。
    • 在极狐GitLab导入页面上,将 GitHub 个人访问令牌粘贴到“个人访问令牌”字段中。

3、点击“验证”按钮。

4、选择要迁移的项目。

5、选择要迁移的项目以及目的地。

6、按下“导入”按钮。

现在您应该在工作区中拥有导入的项目。有关从GitHub迁移到GitLab的其他指导,您可以观看此视频:

 

从 GitHub 到极狐GitLab 的迁移指南

 

完成仓库迁移后,您可以设置 Jenkins 流水线来在极狐GitLab 中使用Jenkinsfile。这可以通过 Jenkins 流水线配置菜单设置仓库URL来完成,链接至您最新导入的项目。

Jenkins流水线SCM设置

 

这对于初始仓库迁移阶段非常有用,使您可以同时使用 Jenkins 和极狐GitLab,从而在迁移 CI/CD 功能时防止服务中断。

 

此外,您可以利用极狐GitLab Jenkins插件来帮助迁移。此插件允许GitLab触发和获取 Jenkins 构建的状态。

 

迁移CI/CD流水线

 

一旦您将仓库迁移到极狐GitLab,您就可以继续将 Jenkins 流水线迁移到极狐GitLab。 这个过程可能会相对简单,但需要对Jenkins和极狐GitLab的概念和语法有一定的了解。

 

Jenkins 提供了两种不同类型的语法来定义流水线,即声明式和脚本。在本指南中,我们将介绍从声明式流水线迁移,因为它们是最常用的。

 

逐步流水线迁移

 

在这个教程中,我们将分析一个使用Jenkinsfile(Groovy)和极狐GitLab CI/CD 配置文件(YAML)构建、测试和部署使用 Golang 编写的微服务。然后,我们将启用极狐GitLab中的流水线,并查看其结果。该流水线将:

 

  • 使用带有 alpine标签的 golang 容器镜像
  • 运行一个任务来将 Golang代码编译为可执行二进制文件
    • 将构建的可执行文件存储为artifact
  • 运行一个任务来运行单元测试
  • 运行一个任务部署到 staging
    • 仅在提交指向 staging 分支时执行
    • 在测试阶段成功后开始
    • 使用前一个任务中构建生成的可执行文件 artifact

 

在下面,您可以看到Jenkins和极狐GitLab 流水线的定义以及描述性注释。您可以在项目中查看流水线的运行情况。现在让我们来看一个用Groovy编写的Jenkinsfile:

 

// The top-level of the declarative
// pipeline.
pipeline {

  // Defines the default agent to use
  // when it is not explicitly defined
  // in a job.
    agent any

  // Defines the stages that will run
  // in numerical order. Each stage
  // only runs one job.
    stages {

    // Defines the name of the stage
        stage('build') {
      // Defines the container image to
      // use for this job, overwriting
      // the default 'agent any'.
      // The Jenkins Docker plugin
      // must be configured for this
      // to run.
            agent { docker 'golang:alpine' }

      // Defines the sequence of steps
      // to execute when the stage is
      // run.
            steps {
                sh 'go build -o bin/meow-micro'
                sh 'chmod +x bin/meow-micro'
            }

      // The steps to run after the
      // stage completes.
            post {
              always {

        // Stores the stage artifacts
        // generated for use in another
        // job.
                archiveArtifacts artifacts: 'bin/meow-micro'
                onlyIfSuccessful: true
              }
            }
        }

    stage('test') {
            agent { docker 'golang:alpine' }
            steps {
                sh 'go test .'
            }
        }

        stage('deploy') {
      // Defines conditions which must
      // be met in order for the job to
      // execute. In this case the
      // deploy job will only run on the 
      // staging branch.
            when {
              branch 'staging'
            }
            steps {
                echo 'Deploying meow-micro to staging'
        // Uses the artifact stored in
        // the build stage.
                sh './bin/meow-micro'
            }
        }
    }
}

 

现在,让我们看看如何在极狐GitLab 中创建相同的功能:

 

# Defines the default image to use
# when it is not explicitly defined in
# a job.
default:
  image: alpine:latest

# Defines the order to run the stages.
# Each stage can have multiple jobs.
stages:
  - build
  - test
  - deploy

# Defines the name of the job
create-binary:
 # Defines the stage the job will run in
  stage: build
 # Defines the container image to use
 # for this job, overwriting default.
  image: golang:alpine
 # Defines the sequence of steps to
 # execute when the job is run.
  script:
    - go build -o bin/meow-micro
    - chmod +x bin/meow-micro
 # Stores the job artifacts generated
 # for use in another job.
  artifacts:
    paths:
      - bin/meow-micro
    expire_in: 1 week

unit-tests:
  stage: test
  image: golang:alpine
  script:
    - go test .
 # Defines commands to run after the
 # job.
 after_script:
  - echo "Tests Complete"

staging-deploy:
  stage: deploy
 # Defines commands to run before the
 # actual job.
  before_script:
    - apk update
  script:
    - echo "Deploying meow-micro to staging environment"
    - ./bin/meow-micro
 # Defines conditions which must be met
 # in order for this job to execute. In
 # this case the staging-deploy job will 
 # only run on the staging branch.
  rules:
    - if: $CI_COMMIT_BRANCH == 'staging'
 # Allows the artifact stored in the
 # build job to be used in this job.
  artifacts:
    paths:
      - bin/meow-micro

 

正如您可能已经注意到的那样,在语法方面,Jenkins 和极狐GitLab 之间都有许多相似之处,使得流水线迁移变得简单直接。虽然上面提供了一个基本示例,但请务必阅读两种工具之间的功能和概念的全面对比列表。

 

现在我们已经了解了如何将 Jenkins 映射到极狐GitLab,我们可以开始在极狐GitLab 中使用相同功能创建流水线。为了执行 CI/CD 的迁移,您可以按照以下步骤操作:

 

1、打开您在上面迁移到极狐GitLab的仓库。

 

在左侧边栏的顶部,选择搜索或前往…”。

定位您的项目。
 

2、打开流水线编辑器。

 

在左侧边栏中,选择“构建” > “流水线编辑器”。

 

流水线编辑器菜单

  • 点击“配置流水线”按钮.

配置流水线选择

 

3. 填充 .gitlab-ci.yml文件

 
  • 添加极狐GitLab CI 流水线代码。

 

流水线编辑器输入

 

  • 确保语法正确。

流水线语法验证

 

  • 可视化流水线。

流水线可视化

 

4. 将文件提交到主分支。

 

● 添加提交消息。

● 确保分支设置为主分支。

● 单击提交更改按钮。

 

提交更改对话框

 

一旦文件已合并,定义的流水线将启动。您可以返回到项目并通过在项目的“构建”>“流水线”页面下选择查看流水线的运行情况。由于它在主分支上运行,您将只看到创建二进制文件和单元测试作业;staging 环境部署作业仅在 staging 分支上运行。

Pipeline running on main branch

 

在主分支上运行的流水线

 

 

点击作业时,我们可以看到它的输出:

创建二进制作业输出

单元测试作业输出输入

staging 环境部署作业输出

 

您可以看到存储在创建二进制作业中的制品是如何在暂存部署作业中使用的。这就可以看出将流水线从 Jenkins 迁移到极狐GitLab 是多么简单!

 

迁移时的其他考虑事项

 

我们发现一些有用的考虑事项可以使部署过程更加简单:

 

  • 不要试图将任务一对一地复制到极狐GitLab 作业中。花些时间来了解当前流水线正在执行的任务以及其解决的问题。
  • 有些 Jenkins 作业可能过于复杂,不能立即迁移到极狐GitLab中。出于这个原因,使用极狐GitLab Jenkins插件来启动 Jenkins 流水线,并直接从极狐GitLab查看它们的结果可能是有益的。这样你可以逐步将特定操作迁移到极狐GitLab,直到整个流水线都完成迁移。
  • 从一开始就使用极狐GitLab 提供的内置模板实现安全扫描和代码质量分析。这将让您将安全性向左移动,减少可能发生的违规行为。不要使 CI/CD 配置过于复杂,并尝试一次性使用每个功能优势。将代码模块化,采用小的迭代实现。
  • 从一开始就实施监控和治理。
  • 了解极狐GitLab Runner(Go 语言编写的组件)可能与 Jenkins 代理(Java 编写)的行为不同。CPU 使用率和内存消耗可能不同 —— 请确保随着时间的推移进行比较。
  • 考虑投资自动扩展机制,并在周末或工作时间之外关闭不必要的资源。
  • 通过使作业容器化来现代化应用程序开发。Jenkins 作业今天不在容器中执行,而是在作为 VM 运行的 Jenkins 代理上执行。

 

虽然这个列表并不详尽,但它提供了一些要注意的好的开始点。如果需要额外的帮助,极狐GitLab提供专业服务来支持您的迁移之旅。

极狐GitLab 一体化DevOps平台 专为中国用户研发,免费试用60天专业版高级功能

资讯中心为极狐(GitLab) 旗下专业的软件研发技能学习中心,为研发、安全、运维等全软件研发生命周期的从业者提供从内容到实操的专业知识。

极狐GitLab 公众号

Copyright © 2024 极狐信息技术(湖北)有限公司 鄂ICP备2021008419号-1 鄂公网安备42018502006137号
售前咨询
联系电话
在线支持
预约演示