У меня есть скриптовый конвейер, который мне нужно проверять из репо, а не локально. Однако, когда я добавляю его в git, работа сразу же перестает работать. Вот рабочий сценарий;
node {
INSTANCE_ID = ""
stage('Get Instance Id') {
INSTANCE_ID = sh (
script: 'aws ec2 describe-instances --region=$awsRegion --filters Name=tag:Name,Values=\"$instanceName\" --query \'Reservations[0].Instances[0].InstanceId\'',
returnStdout: true
).trim()
if (INSTANCE_ID == "") {
error 'No instance with the name ' + $instanceName + ' was found in the ' + $awsRegion + ' region.'
}
}
stage('Start EC2 Instance') {
sh ('aws ec2 start-instances --region=$awsRegion --instance-ids ' + INSTANCE_ID)
}
stage('Wait for instance to be running') {
INSTANCE_STATE = sh (
script: 'aws ec2 describe-instances --region=$awsRegion --instance-id ' + INSTANCE_ID + ' --query \'Reservations[0].Instances[0].State.Name\'',
returnStdout: true
).trim()
numberOfStatusChecksPerformed = 0
while (INSTANCE_STATE != '"running"') {
echo INSTANCE_STATE
sleep 20
numberOfStatusChecksPerformed = numberOfStatusChecksPerformed + 1
// Wait 5 minutes
if (numberOfStatusChecksPerformed > 15) {
error 'Instance state was not running, it status is: ' + INSTANCE_STATE
}
INSTANCE_STATE = sh (
script: 'aws ec2 describe-instances --region=$awsRegion --instance-id ' + INSTANCE_ID + ' --query \'Reservations[0].Instances[0].State.Name\'',
returnStdout: true
).trim()
}
}
}
Я пытаюсь преобразовать его, изменив; node {
к;
#!/usr/bin/env groovy
def INSTANCE_ID = ""
pipeline {
agent any
stages {
Остальное остается прежним. Я получаю следующую ошибку:
java.io.FileNotFoundException
at jenkins.plugins.git.GitSCMFile$3.invoke(GitSCMFile.java:167)
at jenkins.plugins.git.GitSCMFile$3.invoke(GitSCMFile.java:159)
at jenkins.plugins.git.GitSCMFileSystem$3.invoke(GitSCMFileSystem.java:193)
at org.jenkinsci.plugins.gitclient.AbstractGitAPIImpl.withRepository(AbstractGitAPIImpl.java:29)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.withRepository(CliGitAPIImpl.java:72)
at jenkins.plugins.git.GitSCMFileSystem.invoke(GitSCMFileSystem.java:189)
at jenkins.plugins.git.GitSCMFile.content(GitSCMFile.java:159)
at jenkins.scm.api.SCMFile.contentAsString(SCMFile.java:338)
at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:110)
at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:67)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:303)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:429)
Finished: FAILURE
Вам не нужно преобразовывать в декларативный конвейер; просто придерживайтесь Scripted, если он вам подходит. Вообще говоря, преобразовать конвейеры со сценариями в декларативные конвейеры намного сложнее, чем наоборот. Если у вас есть рабочий скриптовый конвейер, не меняйте его вообще, просто поместите рабочий скрипт конвейера в свой Jenkinsfile в репозиторий Git, и он должен работать нормально.