docker容器内的Jenkins管道,使用SSH密钥进行SSH文件传输
我正在尝试将teamcity管道迁移到jenkins管道 我已经习惯了teamcity,我仍然在Jenkins周围找到自己的路,但我还没有找到一种方法来做到这一点 我想要一个包含两个步骤的管道,一个用于编译应用程序,第二个用于使用SSH和私钥将其发送到服务器 我可以在Teamcity轻松做到这一点(经过一些研究),但我和Jenkins一起进行了研究,没有找到实现这一点的方法,也没有在网上找到例子 我曾经尝试过一个自由式项目,在这个项目中我可以配置SSH代理,但我似乎找不到将其余逻辑放在哪里,还有一个多分支管道,它使用repo中的Jenkinsfile进行编译,但却没有设置发送文件的细节 我应该使用多分支管道并从Jenkins文件中“发送”文件吗?如果是这样,我如何告诉Jenkins将钥匙提供给docker容器 或者我应该使用freestyle项目,如果是这样,我如何告诉它首先使用Jenkinsfile,然后将生成的一个或多个文件发送到目标服务器docker容器内的Jenkins管道,使用SSH密钥进行SSH文件传输,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我正在尝试将teamcity管道迁移到jenkins管道 我已经习惯了teamcity,我仍然在Jenkins周围找到自己的路,但我还没有找到一种方法来做到这一点 我想要一个包含两个步骤的管道,一个用于编译应用程序,第二个用于使用SSH和私钥将其发送到服务器 我可以在Teamcity轻松做到这一点(经过一些研究),但我和Jenkins一起进行了研究,没有找到实现这一点的方法,也没有在网上找到例子 我曾经尝试过一个自由式项目,在这个项目中我可以配置SSH代理,但我似乎找不到将其余逻辑放在哪里,还有
或者我应该使用完全不同的东西吗?您可以在管道中这样做: 1/通过创建一个新凭据(带有私钥的ssh用户名),将您的私钥添加到Jenkins 2/在Jenkins文件中:
node {
try {
stage ("build") {
dir('Build') {
env.NODEJS_HOME = "${tool 'Node 12.12'}"
env.PATH="${env.NODEJS_HOME}/bin:${env.PATH}"
sh 'npm install'
sh 'npm pack'
}
}
stage ("Deploy") {
def remote = [:]
remote.name = 'name of your server'
remote.host = 'ip of your server'
remote.allowAnyHosts = true
dir ('Build') {
withCredentials([sshUserPrivateKey(
credentialsId: 'id_of_your_previously_created_credential',
keyFileVariable: 'identityKey',
passphraseVariable: 'passphraseV',
usernameVariable: 'userR')])
{
remote.user = userR
remote.passphrase = passphraseV
remote.identityFile = identityKey
sshPut remote: remote, from: "yourArchive.tgz", into: '.'
}
}
}
} catch (e) {
println "Caught: ${e}"
throw e
}
}
我使用了npm作为示例,“NPMPack”创建了一个档案,我们将上传到服务器
您可能还需要安装(如果尚未安装)以下插件:
- SSH凭据插件
- SSH管道步骤
- 凭据绑定插件
- 凭证插件
node {
try {
stage ("build") {
dir('Build') {
env.NODEJS_HOME = "${tool 'Node 12.12'}"
env.PATH="${env.NODEJS_HOME}/bin:${env.PATH}"
sh 'npm install'
sh 'npm pack'
}
}
stage ("Deploy") {
def remote = [:]
remote.name = 'name of your server'
remote.host = 'ip of your server'
remote.allowAnyHosts = true
dir ('Build') {
withCredentials([sshUserPrivateKey(
credentialsId: 'id_of_your_previously_created_credential',
keyFileVariable: 'identityKey',
passphraseVariable: 'passphraseV',
usernameVariable: 'userR')])
{
remote.user = userR
remote.passphrase = passphraseV
remote.identityFile = identityKey
sshPut remote: remote, from: "yourArchive.tgz", into: '.'
}
}
}
} catch (e) {
println "Caught: ${e}"
throw e
}
}
我使用了npm作为示例,“NPMPack”创建了一个档案,我们将上传到服务器
您可能还需要安装(如果尚未安装)以下插件:
- SSH凭据插件
- SSH管道步骤
- 凭据绑定插件
- 凭证插件