问题描述
在使用Jenkins时,希望能够从Nexus下载一个文件作为zip文件到Jenkins agent,并在准备好后部署到nginx服务器。用户只能使用用户名和密码对访问Nexus。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
在Jenkins中,可以将凭据(用户名/密码或SSH密钥对)放入Jenkins内置的凭据存储中,然后在Pipeline脚本中使用sshagent
步骤来执行SCP命令。以下是具体步骤:
1. 将凭据添加到Jenkins凭据存储中。
2. 在Pipeline脚本中使用sshagent
步骤,并指定凭据名称。
下面是一个示例Pipeline脚本:
pipeline {
agent any
stages {
stage('Download Artifact') {
steps {
sshagent(credentials: ['my-credentials']) {
sh('scp mynexus.com/my_artifact.zip ~/my_artifact.zip')
}
}
}
// 其他阶段和步骤
}
}
在上面的示例中,我们首先在Jenkins凭据存储中添加了一个名为my-credentials
的凭据。然后,在Pipeline脚本的Download Artifact
阶段中,我们使用sshagent
步骤来执行SCP命令,并指定凭据名称。这将使Jenkins能够使用凭据中的用户名和密码来访问Nexus,并将文件下载到Jenkins agent上的指定路径。
请注意,如果你的Jenkins没有安装SSH Agent插件,你可能需要先安装该插件才能使用sshagent
步骤。
方案2
另一种方法是在Jenkins中使用参数化构建,并使用curl命令从Nexus下载文件。以下是具体步骤:
1. 在Jenkins中创建一个String参数artifactID
,以及一个Password参数NexusUser
和NexusPassword
,分别用于存储Nexus的用户名和密码。
2. 在Pipeline脚本中使用curl命令来下载文件,并指定Nexus的URL和参数化构建的参数。
下面是一个示例Pipeline脚本:
pipeline {
agent any
parameters {
string(name: 'artifactID', defaultValue: 'my_artifact', description: 'Nexus artifact ID')
password(name: 'NexusUser', defaultValue: '', description: 'Nexus username')
password(name: 'NexusPassword', defaultValue: '', description: 'Nexus password')
}
stages {
stage('Download Artifact') {
steps {
sh("curl -v -u ${params.NexusUser}:${params.NexusPassword} -o ~/tmp_dl/distr.zip https://my_nexus_url.com/nexus/content/repositories/${params.artifactID}/distrib.zip")
}
}
// 其他阶段和步骤
}
}
在上面的示例中,我们首先在Jenkins中创建了三个参数:artifactID
、NexusUser
和NexusPassword
。然后,在Pipeline脚本的Download Artifact
阶段中,我们使用curl命令来下载文件,并使用参数化构建的参数来指定Nexus的URL和凭据。
请注意,为了避免将用户名和密码以明文形式暴露在日志中,你可以使用Jenkins Mask Passwords插件来隐藏凭据。建议使用凭据的方式来访问Nexus,而不是直接在脚本中使用用户名和密码。
注意:方案1是使用SSH进行文件传输,方案2是使用curl命令进行文件下载。根据你的具体需求和环境,选择适合的方案。