Jenkinsfileを使用してJenkinsワークフローを作成しようとしています。 「develop」ブランチの変更を監視するだけです。変更が発生したら、タグをgitし、マスターにマージします。 GitSCM Stepを使用していますが、サポートしていると思われるのはgit cloneだけです。タグ/マージを実行するためにシェルを作成する必要はありませんが、回避する方法はありません。これが可能かどうかは誰にもわかりますか? GitサーバーにBitBucket(オンプレミス)を使用しています。
以前はフリースタイルジョブのタグ付け/マージ/プッシュを行うプラグインであったGitPublisher
プラグインは、Jenkinsパイプラインと互換性があるように更新されていないため、現時点では不可能です。 パイプラインプラグインの互換性ページ と専用の GitPublisher Jira issue の両方でこの問題を追跡できます。
だから、あなたが持っている唯一のオプションは実際にタグ/マージコマンドをシェルアウトすることです...しかし、Gitレポジトリの資格情報の使用など、いくつかのJenkinsビルトイン機能の恩恵を受けることができることに注意してください必要に応じて簡単にタグ付け/マージします。
チェックアウトの例:
git url: "ssh://jenkins@your-git-repo:12345/your-git-project.git",
credentialsId: 'jenkins_ssh_key',
branch: develop
タグ/マージ/プッシュは非常に簡単です:
sh 'git tag -a tagName -m "Your tag comment"'
sh 'git merge develop'
sh 'git commit -am "Merged develop branch to master'
sh "git Push Origin master"
いつかGitPublisherがパイプライン互換バージョンでリリースされることを願っていますが、今のところはこの回避策が必要です。
Gitクレデンシャルが必要な場合は、次のリンクのようなSSHエージェントプラグインを使用できます。 https://issues.jenkins-ci.org/browse/JENKINS-28335?focusedCommentId=260925&page=com。 atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-260925
sshagent(['git-credentials-id']) {
sh "git Push Origin master"
}
私の場合、HTTPSを使用せざるを得ませんでした。私はそれを解決しました:
その後、git Pushで物事をプッシュできます。
このような:
sh 'git config --global credential.helper cache'
sh 'git config --global Push.default simple'
checkout([
$class: 'GitSCM',
branches: [[name: branch]],
extensions: [
[$class: 'CloneOption', noTags: true, reference: '', shallow: true]
],
submoduleCfg: [],
userRemoteConfigs: [
[ credentialsId: 'bitbucketUsernamePassword', url: cloneUrl]
]
])
sh "git checkout ${branch}" //To get a local branch tracking remote
その後、次のようなことができます:
sh 'git Push'
はい、そうです!!数日間苦労した後、私はスクリプト化されたパイプラインスクリプト用のこれらの簡単なコードブロックになりました。
withCredentials([sshUserPrivateKey(credentialsId: '<credential-id>', keyFileVariable: 'SSH_KEY')]) {
sh("git Push Origin <local-branch>:<remote-branch>")
}
楽しい!!
このスレッドは本当に役に立ちました。私のJenkinsクレデンシャルはユーザー名/パスワードなので、次を使用しました:
withCredentials([usernamePassword(credentialsId: 'fixed', usernameVariable: 'username', passwordVariable: 'password')]){
{
sh("git Push http://$username:[email protected]/repo")
}
ユーザー名とパスワードは両方ともログで隠されています:
+ git Push http://****:****@git.corp.mycompany.com/repo
私は同様のタスクを実行する必要があり、これを次のバリエーションで動作させることができました: https://issues.jenkins-ci.org/browse/JENKINS-28335?focusedCommentId=320383&page=com。 atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-32038
withCredentials([sshUserPrivateKey(credentialsId: 'ci', keyFileVariable: 'SSH_KEY')]) {
sh 'echo ssh -i $SSH_KEY -l git -o StrictHostKeyChecking=no \\"\\$@\\" > local_ssh.sh'
sh 'chmod +x local_ssh.sh'
withEnv(['GIT_SSH=local_ssh.sh']) {
sh 'git Push Origin develop'
}
}
一方、ci
は、Jenkins内で設定した資格情報のIDです。 sshキーへのパスは、環境変数SSH_KEY
として使用可能になります。
これは青い海のsshagentで動作します(https認証を使用します)
sshagent(credentials: ["406ef572-9598-45ee-8d39-9c9a227a9227"]) {
def repository = "git@" + env.GIT_URL.replaceFirst(".+://", "").replaceFirst("/", ":")
sh("git remote set-url Origin $repository")
sh("git tag --force build-${env.BRANCH_NAME}")
sh("git Push --force Origin build-${env.BRANCH_NAME}")
}
私の場合、SSHを介してCodeCommitリポジトリにプッシュしたいと思います。 sshagent
が設定されていないため、User
は機能しません。これは最終的に仕事をしました:
withCredentials([sshUserPrivateKey(credentialsId: CODECOMMIT_CREDENTIALS_ID, keyFileVariable: 'SSH_KEY', usernameVariable: 'SSH_USER')]) {
withEnv(["GIT_SSH_COMMAND=ssh -o StrictHostKeyChecking=no -o User=${SSH_USER} -i ${SSH_KEY}"]) {
sh 'git Push ${CODECOMMIT_URL} ${COMMIT_ID}:refs/heads/${BRANCH}'
}
}
Litty Philipsの答えは私にほとんど道を譲りましたが、GIT_SSH_COMMANDを定義する必要もありました。
withCredentials([sshUserPrivateKey(credentialsId: '<credential-id>', keyFileVariable: 'SSH_KEY')]) {
sh """
GIT_SSH_COMMAND = "ssh -i $SSH_KEY"
git Push Origin <local-branch>:<remote-branch>
"""
}