这是第一次使用Jenkins DSL拉取作业。我所有的作业都是通过CasC加载的。我想并希望有一个设置,每15分钟轮询一次scm,以保持gitlab repo中的作业最新。我的十几个作业中的大部分都是手动触发的,大约有三个是预定运行的,比如说每天上午10点。
但我所经历的是,每次我提交到开发分支,所有的工作都被沉没和执行。
在我的CasC Jenkins文件中:
jobs:
- script: >
folder('App/scheduled')
- file: /var/jenkins_home/pipelines/pull_app_server_deploy_m23_dev_devops_daily
拉取作业pull_app_server_deploy_m23_dev_devops_daily:
pipelineJob("App/scheduled/M23 dev_devops daily deploy") {
disabled(false)
definition {
cpsScm {
scm {
git {
remote {
url("https://gitlab.domain.com/Common/tools/jenkins.git")
credentials("*******************************")
}
branch('develop')
}
}
scriptPath("jobs/app_server_deploy_m23_dev_devops_daily")
}
}
triggers {
scm('H/15 * * * *')
}
}
然后在我的实际管道工作中,我有这样的东西:
env.agentName = ""
pipeline {
agent any
triggers {
cron('0 15 * * 1-5')
}
stages {
stage ('Decide which agent') {
steps {
script {
env.agentName = "co-dev-deploy01"
echo "Will execute on ${env.agentName}"
}
}
}
stage ('App Deploy') {
options {
timeout(time: 3600, unit: 'SECONDS')
}
steps {
node ( agentName as String ) {
dir("/opt/home/p4/tools/ansible/ML/2023/deploy_conf") {
ansiblePlaybook([
credentialsId: 'co-ssh',
inventory: "inventory/dev_devops",
playbook: 'deploy_app_server.yml',
vaultCredentialsId: "vault_dev_devops_passwd",
colorized : true,
extraVars : [
deploy_env: "dev_devops",
cl_to_deploy: "latest",
build_type: "debug-opt",
deploy_cluster: "all",
restart_wait_time: "1",
restart_mysql_schema_clear: "None",
individual_schemas: "",
mysql_soft_fail_enable: false,
redis_restart: true,
redis_hard_stop: true,
clean_build: false,
branch: "DL"
]
])
}
}
}
}
}
}
我错过什么了吗?我是否还缺少另一个参数来告诉它在同步后不要执行?在GUI中,当查看作业配置时,我确实看到上面的代码转换为:
构建触发器:周期性地构建(0 1 - 5 * * 1-5)〈--这是所期望的。轮询SCM(H/15****)〈--我希望轮询但不触发。
我只设置了两个分支,分别是develop和main,没有其他分支。也许我需要重组我的回购?
非常感谢您的帮助。
1条答案
按热度按时间30byixjq1#
解决方案是删除此:
它是多余的,并导致文件执行。我做了一个假设,上面的那块将控制SCM轮询,但这是分开的。因此,删除该部分,因为拉作业将自行轮询。