从 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: []