我们有一系列相同的Jenkinsfile脚本,除了每个脚本都配置一个环境项以指向保存Jenkinsfile的SCM检出目录中的目录。这用于引用同一目录中的文件。 SCM存储库在不同目录中具有所有这些Jenkinsfile脚本。如果只能检索包含Jenkinsfile的目录的路径,则可以看到一个容易的开口,以使管道脚本在每种情况下都相同。
我尝试了几种不同的操作,例如包含步骤
protected void ButtonAtt_Click(object sender, EventArgs e)
{
if (FileUploadAtt.HasFile)
{
//append id to filename
string sFilename = DDFindEmp.SelectedValue.ToString() + "-" + FileUploadAtt.FileName;
string sPath = Server.MapPath("/Training");
// upload file into filestore directory
try
{
FileUploadAtt.SaveAs(sPath + sFilename);
}
catch (Exception ex)
{
LabelAtt.Text = "Error uploading file: " + ex.Message.ToString();
}
}
else
{
LabelAtt.Text = "Please select a file for upload.";
}
}
和
script {
println __FILE__
}
两者均未运行(在script {
scriptDir = new File(getClass().protectionDomain.codeSource.location.path).parent
println scriptDir
}
情况下给出了不存在的变量,在第二种情况下给出了权限违反)。我尝试了__FILE__
和其他变体。
我需要在steps-sh块中使用该目录,因此我认为它必须位于环境项中。
现在,Jenkins作业配置提供了Jenkins文件的路径,但是我不想重复此操作以在该级别创建另一个环境变量。
已咨询:
感谢您的帮助。
答案 0 :(得分:1)
如果您确实需要此功能,则可以获取"${JOB_URL}config.xml"
并解析scriptPath
。
但这显然不是一个干净的解决方案。
答案 1 :(得分:0)
def currentScriptPath = new File(currentBuild.rawBuild.parent.definition.scriptPath).parent
但这需要批准很多方法。
答案 2 :(得分:-1)
最简单的方法是将Jenkins文件放在存储库的根目录中,并获取Jenkins设置的WORKSPACE环境变量的值。
鉴于Groovy基本上只是Java,您可以这样获得绝对路径:
install prerequisites