如果存储库中存在现有 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()
}
}
}
我不太确定这个问题是否有资格在 StackOverflow 上得到回答,但仍然如此。
与其他一些系统不同,Jenkins 在 UI 中的作业和这些作业所使用的代码之间没有直接联系。此外,Jenkinsfile 甚至无法定义作业的基本参数,例如其名称或 SCM 分支配置 - 如果想要在代码中定义作业,则必须使用单独的工具Job DSL。即使使用它,也必须单独触发并显式设置以自动删除作业,但同样 - Jenkinsfile 无法控制它。
因此,从存储库中删除 Jenkinsfile 不会对作业本身产生任何影响(除非它现在会失败,因为它不再能够找到 Jenkinsfile)。该作业仍然需要手动删除,除非您的 Jenkins 管理员设置了一些极其复杂的自定义自动化 - 这将是一种非常罕见的情况。