如果我从存储库中删除 Jenkinsfile 会发生什么,这会删除整个 Jenkins 实现吗?

问题描述 投票:0回答:1

如果存储库中存在现有 Jenkinsfile,如果我不在 Jenkins UI 中手动修改任何内容而仅从存储库中删除 Jenkinsfile,Jenkins 管道和整个实现是否会被删除?

是否有必要删除 UI 中的管道和项目,或者删除 Jenkinsfile 会删除整个 Jenkins 实现吗?

这是 Jenkinsfile 的示例:

@Library('shared-library@main') _
pipeline {

    agent any

    environment {
        APP_NAME = 'my-app'
        DEPLOYMENT_CHANNEL = 'test'
        AWS_REGION = 'random-region'
        AWS_ACCOUNT_ID = '0000000'
        GIT_SHORT_COMMIT = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim()
        ON_TAG = "${env.BRANCH_NAME}-${GIT_SHORT_COMMIT}".replace("/", "-")
    }

    stages {
        stage('Build image') {
            steps {
                script {
                    sh "make build"
                }
            }
        }
        stage('Push image') {
            when {
                anyOf {
                    expression { env.BRANCH_NAME == 'master' }
                }
            }

            steps {
                script {
                    withCredentials([[
                        $class: 'Blabla',
                        credentialsId: 'BLABLA',
                        accessKeyVariable: 'HELLO_1',
                        secretKeyVariable: 'HELLO_2'
                        ]]) {
                        aws.loginECR(AWS_REGION)
                        sh "make push"
                    }
                }
            }
        }

        stage('Trigger deployment 🚀🚀🚀') {
            when {
                anyOf {
                    expression { BRANCH_NAME == 'master' }
                }
            }
            steps {
                script {
                    deploytok8s.call('env', "$APP_NAME", "$app_TAG")
                    slackSend(channel: "$DEPLOYMENT_CHANNEL", message: "Started deploying $APP_NAME on env")
                }
            }
        }

        stage('Trigger Kubernetes deployment to env_2 🚀🚀🚀') {
            
            when {
                beforeInput true
                expression { return BRANCH_NAME == 'master' }
            }
            steps {
                
                script {
                    try {
                        deployToEnv = input (
                        message: "Deploy to env_2?"
                        )
                        deploytok8s.call('uat', "$APP_NAME", "$app_name")                            
                        slackSend(channel: "$DEPLOYMENT_CHANNEL", message: "Started deploying $APP_NAME on env_2")
                    }
                    catch(e) {
                        echo "Skipped deployment to env_2!"
                    }
                    
                }
            }
        }
        }
    }
    post {
        always {
            cleanWs()
        }
    }
}
jenkins continuous-integration jenkins-pipeline cicd
1个回答
0
投票

我不太确定这个问题是否有资格在 StackOverflow 上得到回答,但仍然如此。

与其他一些系统不同,Jenkins 在 UI 中的作业和这些作业所使用的代码之间没有直接联系。此外,Jenkinsfile 甚至无法定义作业的基本参数,例如其名称或 SCM 分支配置 - 如果想要在代码中定义作业,则必须使用单独的工具Job DSL。即使使用它,也必须单独触发并显式设置以自动删除作业,但同样 - Jenkinsfile 无法控制它。

因此,从存储库中删除 Jenkinsfile 不会对作业本身产生任何影响(除非它现在会失败,因为它不再能够找到 Jenkinsfile)。该作业仍然需要手动删除,除非您的 Jenkins 管理员设置了一些极其复杂的自定义自动化 - 这将是一种非常罕见的情况。

© www.soinside.com 2019 - 2024. All rights reserved.