Gitee 帮助中心 / 帮助详情

    从 Jenkins 迁移到 GiteeGo

    GiteeGo 和 Jenkins 有多种相似之处,这使得迁移到 GiteeGo 相对比较简单。

    1.简介

    Jenkins 和 GiteeGo 都允许您创建能自动构建、测试、发布、发行和部署代码的工作流程。 Jenkins 和 GiteeGo 的工作流程配置有一些相似之处:

    • Jenkins 使用阶段运行步骤集合,而 GiteeGo 也同样采用阶段运行步骤聚合。
    • Jenkins 和 GiteeGo 支持基于容器的构建。
      更多信息请参阅“GiteeGo 的核心概念”。

    2.主要差异

    Jenkins 有两种类型的语法用来创建管道:Declarative Pipeline 和 Scripted Pipeline。 GiteeGo使用 YAML 创建工作流程和配置文件。更多信息请参阅“GiteeGo的工作流程搭建

    3.比较功能

    使用阶段搭建Pipeline
    Jenkins 将其 Declarative Pipelines 分为多个阶段。 同样,GiteeGo 也将其工作流程分成单独的部分。 下表比较了Jenkins 阶段与 GiteeGo 工作流程。

    Jenkins指令 GiteeGo Pipeline
    agent steps.step.hostGroupID
    post
    stages stages
    steps steps

    预定义变量
    Jenkins 和 GiteeGo 设置多个环境变量,以便检查持续集成系统的执行环境并与之交互。

    说明 Jenkins GiteeGo Pipelines
    当前流水线构建的唯一数字标识符 BUILD_NUMBER GITEE_PIPELINE_BUILD_NUMBER
    Git 提交 ID GIT_COMMIT GIT_COMMIT
    Git 仓库路径 GIT_URL
    Git 提交分支 GIT_BRANCH GIT_BRANCH
    签出源的位置 WORKSPACE GITEE_REPO

    GiteeGo额外提供以下参数以供使用:

    说明 参数名
    流水线唯一标识 GITEE_PIPELINE_NAME
    流水线名字 GITEE_PIPELINE_DISPLAY_NAME
    流水线触发人 GITEE_PIPELINE_TRIGGER_USER
    流水线触发人ID GITEE_PIPELINE_TRIGGER_USER_ID
    阶段唯一标识 GITEE_STAGE_NAME
    阶段名字 GITEE_STAGE_DISPLAY_NAME
    阶段触发策略 GITEE_STAGE_STRATEGY
    Push和Tag的message或PR的title GITEE_COMMIT_MESSAGE
    发起PR时的源分支 GITEE_SOURCE_BRANCH
    发起PR时的源分支commit GITEE_SOURCE_COMMIT
    发起PR时的PR号 GITEE_PULL_ID

    4.使用指令

    Jenkins 使用指令来管理 Declarative Pipelines。 这些指令定义工作流程的特性及其执行方式。 下表演示这些指令如何映射到 GiteeGo 中的概念。

    Jenkins指令 GiteeGo Pipeline
    environment variables
    options strategy.stepTimeout stages.stage.strategy stages.stage.trigger
    triggers `triggers.pr.<branches
    triggers { upstreamprojects() }
    Jenkins cron syntax
    stages stages
    tools
    when

    5.使用连续阶段

    并行作业处理
    Jenkins 可以并行运行 stages 和 steps,而 GiteeGo 目前只能并行运行step。

    Jenkins Parallel GiteeGo Pipeline
    parallel
    使用步骤执行任务
    Jenkins 将 steps 组织在 stages。 每个步骤都可以是脚本、函数或命令等。 GiteeGo 与 Jenkins 组织方式都一致。
    Jenkins 步骤 GiteeGo Pipeline
    --- ---
    script

    6.常见任务示例

    计划与 cron 一起运行的流水线
    Jenkins Pipeline

    pipeline {
      agent any
      triggers {
        cron('*/1 * * * *')
      }
    }

    GiteeGo Pipeline

    triggers:
        schedule:
          - cron: '*  */1  *  *  *  ?  *'

    配置流水线中的环境变量
    Jenkins Pipeline

    pipeline {
      agent any
      environment {
        MAVEN_PATH = '/usr/local/maven'
      }
    }

    GiteeGo Pipeline

    variables:
      MAVEN_PATH: '/usr/local/maven'

    从上游流水线构建
    Jenkins Pipeline

    pipeline {
      triggers {
        upstream(
          upstreamProjects: 'job1,job2',
          threshold: hudson.model.Result.SUCCESS
        )
      }
    }

    GiteeGo Pipeline
    后期会支持

    使用多个阶段构建
    Jenkins Pipeline

    pipeline {
        agent any
    
        stages {
            stage('Build') {
                steps {
                    echo 'Building..'
                }
            }
            stage('Deploy') {
                steps {
                    echo 'Deploying....'
                }
            }
        }
    }

    GiteeGo Pipeline

    version: 1.0
    name: demo-workflow
    displayName: 'demo-workflow'
    triggers:
      push:
        branches:
          prefix:
            - ''
    stages:
      - name: Build
        displayName: Build
        strategy: naturally
        trigger: auto
        steps:
          - step: build@maven
            name: build_maven
            displayName: Maven 构建
            jdkVersion: 8
            mavenVersion: 3.3.9
            commands:
              - mvn clean package
      - name: Deploy
        displayName: Deploy
        strategy: naturally
        trigger: auto
        steps:
          - step: publish@general_artifacts
            name: publish_general_artifacts
            displayName: 上传制品
            dependArtifact: BUILD_ARTIFACT
            artifactRepository: default
            artifactName: output

    Demo完整样例

    Jenkins Pipeline

    pipeline {
        agent {
            node {
                label "agent-119"
            }
        }
    
        stages {
            stage('Build') {
                steps {
                    sh '''
                        mvn -B clean package -Dmaven.test.skip=true
                    '''
                }
            }
            stage('BuildImage') {
                steps {
                    sh '''
                        docker build -t docker.io/gitee-go/test-maven:v1.0.0 .
                    '''
                }
            }
            stage('Deploy') {
                steps {
                    sh '''
                        mv ./target/maven-demo-0.0.1-SNAPSHOT.jar ~/gitee_go/deoloy
                        cd ~/gitee_go/deoloy
                        ls
                        nohup java -jar maven-demo-0.0.1-SNAPSHOT.jar --server.port=7081 & 
                        echo "Deploy Success"
                        sleep 10
                        curl 127.0.0.1:7081
                    '''
                }
            }
        }
    }

    GiteeGo Pipeline

    version: '1.0'
    name: master-pipeline
    displayName: MasterPipeline
    triggers:
      push:
        branches:
          include:
            - master
    stages:
      - name: compile
        displayName: 编译
        strategy: naturally
        trigger: auto
        steps:
          - step: build@maven
            name: build_maven
            displayName: Maven 构建
            jdkVersion: 8
            mavenVersion: 3.3.9
            artifacts:
              - name: BUILD_ARTIFACT
                path:
                  - ./target
            commands:
              - mvn -B clean package -Dmaven.test.skip=true
          - step: publish@general_artifacts
            name: publish_general_artifacts
            displayName: 上传制品
            dependArtifact: BUILD_ARTIFACT
            artifactRepository: default
            artifactName: output
            dependsOn: build_maven
      - name: docker-build
        displayName: 镜像构建
        strategy: naturally
        trigger: auto
        executor: []
        steps:
          - step: build@docker
            name: build_docker
            displayName: 镜像构建
            repository: registry.baidubce.com/gitee-test-repo
            username: 112c6b0ac67e42fe97beb3f15a9be562
            password: OSCccr2021
            tag: test:${GITEE_PIPELINE_BUILD_NUMBER}
            dockerfile: ./Dockerfile
            artifacts:
              - ${BUILD_ARTIFACT_PATH}
            isCache: false
      - name: deploy
        displayName: 部署
        strategy: naturally
        trigger: auto
        steps:
          - step: deploy@agent
            name: deploy_agent
            displayName: 主机部署
            hostGroupID: gitee-go-test
            deployArtifact:
              - source: artifact
                name: output
                target: ~/gitee_go/deoloy
                artifactRepository: release
                artifactName: output
                artifactVersion: latest
            script: |
              cd ~/gitee_go/deoloy
              ls
              tar -zxf output.tar.gz
              cd target
              nohup java -jar maven-demo-0.0.1-SNAPSHOT.jar --server.port=7081 & 
              echo "Deploy Success"
              sleep 10
              curl 127.0.0.1:7081
    permissions:
      - role: admin
        members: []

    搜索帮助