我需要编写一个管道脚本,以便它获取我需要的存储库,并且其他阶段在该存储库的上下文中工作。 我还需要所有变量可用,例如上次提交的哈希值或项目名称。
事实上,当我们在作业设置中选择“来自 SCM 的管道脚本”选项时,我需要做同样的事情。
但就我而言,我无法设置“来自 SCM 的管道脚本”,因为我需要编写一个与我需要的存储库 Jenkinsfile 中的管道不同的自定义管道,并且我不想创建另一个 Jenkinsfile。
我不明白如何以这种方式获得 env.GIT_COMMIT ? 下面是我的管道,如果我选择“来自 SCM 的管道脚本”并设置所需的存储库,该管道即可工作。如何
@Library("cnv-jenkins-sharedlib") _
pipeline {
agent {
label 'cnv-jobs'
}
options {
timestamps ()
disableConcurrentBuilds()
}
tools {
maven 'Maven_3.9.2'
jdk 'JDK11'
}
parameters {
choice(name: 'StageName', choices: ['test', 'dev' ], description: 'Choise stage')
booleanParam(name: 'deploy', defaultValue: false, description: 'Deploy')
}
environment {
registryUrl = 'cprd-doc-reg01.example.com:10012'
DOCKER_CREDS = credentials('cnv_docker_reg_creds')
ENV = "${params.StageName}"
DEPLOY_BRANCH = "test"
PROJECT_NAME = "background-osago-tarifficaiton-service"
GIT_HASH = env.GIT_COMMIT.take(7)
}
stages {
stage('prepare Environment'){
steps {
GetBuildVersion()
}
}
stage('Build and Sonar Scanner') {
steps {
MvnBuild(registryUrl: "${registryUrl}", imageName: "cnv-${PROJECT_NAME}", imageTag: "build-${GIT_HASH}", PROFILE: "${ENV}stand")
}
}
stage('Build image'){
steps {
cnvDockerBuild(dockerFile: "src/main/docker/Dockerfile.jvm", registryUrl: "${registryUrl}", imageName: "cnv-${PROJECT_NAME}", imageTag: "build-${GIT_HASH}")
}
}
stage("Deploy to K8S") {
when { expression { params.deploy } }
steps {
CnvDeployK8S(imageTag: "build-${GIT_HASH}")
}
}
}
}
我找到了答案。下面你可以看到我需要什么:
@Library("cnv-jenkins-sharedlib") _
pipeline {
agent {
label 'cnv-jobs'
}
options {
timestamps ()
disableConcurrentBuilds()
}
tools {
maven 'Maven_3.9.2'
jdk 'JDK11'
}
parameters {
choice(name: 'StageName', choices: ['test', 'dev' ], description: 'Choice stage')
booleanParam(name: 'deploy', defaultValue: false, description: 'Deploy to k8s')
}
environment {
registryUrl = 'cprd-doc-reg01.example.com:10012'
DOCKER_CREDS = credentials('cnv_docker_reg_creds')
ENV = "${params.StageName}"
DEPLOY_BRANCH = "feature/CNVPRD-2475/osago_16_model"
PROJECT_NAME = "background-osago-tarifficaiton-service"
}
stages {
stage('Checkout SCM') {
steps {
script {
checkout([$class: 'GitSCM',
branches: [[name: "${env.DEPLOY_BRANCH}" ]],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'CleanCheckout']],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'bitbucket_cnv_ssh', url: "ssh://[email protected]:7999/conv/tariffication-service.git"]]])
def scmVars = checkout([$class: 'GitSCM', branches: [[name: "${DEPLOY_BRANCH}"]],
userRemoteConfigs: [[url: 'https://github.com/jenkinsci/git-plugin.git']]])
GIT_HASH = scmVars.GIT_COMMIT.take(7)
GIT_BRANCH = scmVars.GIT_BRANCH
script{
sh "ls -lat"
}
}
}
}
stage('prepare Environment'){
steps {
sh "echo Git Branch is: ${GIT_BRANCH}"
GetBuildVersion()
}
}
stage('Build and Sonar Scanner') {
steps {
sh "ls -la"
MvnBuild(registryUrl: "${registryUrl}", imageName: "cnv-${PROJECT_NAME}", imageTag: "build-${GIT_HASH}", PROFILE: "${ENV}stand")
}
}
stage('Build image'){
steps {
cnvDockerBuild(dockerFile: "src/main/docker/Dockerfile.jvm", registryUrl: "${registryUrl}", imageName: "cnv-${PROJECT_NAME}", imageTag: "build-${GIT_HASH}")
}
}
stage("Deploy to K8S") {
when { expression { params.deploy } }
steps {
CnvDeployK8S(imageTag: "build-${GIT_HASH}")
}
}
}
post {
always {
script {
notifyBitbucket(
credentialsId: 'cnv_bitbucket',
ignoreUnverifiedSSLPeer: 'true',
stashServerBaseUrl: 'https://bitbucket02.sberins.ru'
)
}
junit 'target/surefire-reports/*.xml'
}
failure {
script {
if (params.release) {
sshagent(['bitbucket_cnv_ssh']) {
sh "git checkout ${env.BRANCH_NAME}"
sh "git tag -d ${env.VERSION}"
sh "git push --delete origin ${env.VERSION}"
}
}
}
emailext mimeType: 'text/html',
body: "Результат выполнения сборки №${env.BUILD_NUMBER} ${env.BUILD_URL}console",
recipientProviders: [culprits(), developers(), requestor()],
replyTo: '[email protected]',
subject: "Error: ${env.JOB_NAME}"
}
success {
script {
emailext mimeType: 'text/html', body: "Результат выполнения сборки №${env.BUILD_NUMBER} ${env.BUILD_URL}console",
recipientProviders: [culprits(), developers(), requestor()],
replyTo: '[email protected]',
subject: "Success: ${env.JOB_NAME}"
}
}
}
}