jenkins

Jenkins Pipeline 与命令行管理

补充说明

Jenkins 是自托管的自动化服务器,用 Jenkinsfile 描述流水线。它插件生态庞大,但版本、权限和插件兼容性需要持续维护。Kubernetes 上的部署方式见 K8s 分支的 jenkins 页。

常用示例

java -jar jenkins-cli.jar -s https://jenkins.example.com -auth user:token list-jobs
java -jar jenkins-cli.jar -s https://jenkins.example.com -auth user:token build app
java -jar jenkins-cli.jar -s https://jenkins.example.com -auth user:token console app
java -jar jenkins-cli.jar -s https://jenkins.example.com -auth user:token who-am-i

声明式 Pipeline:

pipeline {
  agent { label 'linux' }
  options { timeout(time: 30, unit: 'MINUTES') }
  environment {
    APP_ENV = 'staging'
  }
  stages {
    stage('Build') {
      steps {
        sh 'npm ci && npm run build'
      }
    }
    stage('Test') {
      steps {
        sh 'npm test'
      }
      post {
        always { junit 'reports/**/*.xml' }
      }
    }
    stage('Deploy') {
      when { branch 'main' }
      steps {
        withCredentials([string(credentialsId: 'deploy-token', variable: 'TOKEN')]) {
          sh './deploy.sh'
        }
      }
    }
  }
}

易错点与排错

相关命令

读完自测

合上页面,先回答,再展开对照。

  1. 声明式(pipeline {})和脚本式(node {})Pipeline 能否混用?混用会怎样?
  2. job 一直排队时,应先检查什么?
  3. 在 Pipeline 中安全注入部署令牌应该用什么步骤?直接把密码写进 environment 有什么问题?
答案
  1. 不能混用,两种语法不同,混用会产生难懂的报错。
  2. 先检查 agent label 是否匹配,以及节点标签和在线状态。
  3. 用 withCredentials 注入;直接写进 environment 会让密码进入日志和配置。