Estou trabalhando em um pipeline do Jenkins e não consigo entender por que uma das minhas etapas não pode ser executada nas máquinas de destino.
Basicamente, quero implantar meu novo código do repositório do GitHub com o agente Jenkins via ssh.
O problema: quando quero alterar o proprietário do grupo da pasta do projeto, não consigo fazer isso pelo pipeline do Jenkins, mas consigo fazer isso se conectar manualmente com o usuário Jenkins à máquina de destino.
PS: Eu aprovei o script e o pipeline do Jenkins não está em um ambiente Sandbox.
PSS: Consigo copiar meu código para a pasta do projeto com rsync
, então não há problema com isso. O único problema é a mudança de grupo com:chgrp -R gunicorn $PROJECT
Aqui está o que tenho até agora:
Usuário do Jenkins sem permissão de root em uma máquina de destino. O usuário do Jenkins faz parte de outro grupo para o qual preciso alterar meus arquivos. A operação manual de alteração das permissões de grupo (sem sudo) está funcionando bem quando conectado manualmente no Jenkins via SSH, mas não pelo pipeline.
Agradeço antecipadamente.
Meu código de pipeline de exemplo:
pipeline {
agent none
environment {
GITHUB_REPO = 'github.com/************/**********.git'
PROJECT = '/opt/***********/'
}
stages {
stage('Parallel Execution') {
parallel {
stage('Test Deploy Agent 1') {
agent { label '***********' }
steps {
script {
// Use withCredentials to securely inject the GitHub credentials
withCredentials([usernamePassword(credentialsId: 'jenkins-github-test', usernameVariable: 'GITHUB_USER', passwordVariable: 'GITHUB_TOKEN')]) {
// Clone the repository using the provided credentials
sh """
git clone https://\$GITHUB_USER:\$GITHUB_TOKEN@\$GITHUB_REPO \$WORKSPACE/***********
"""
}
}
sh "rsync --exclude='.git/' -q $WORKSPACE/***********/ $PROJECT"
sh "chgrp -R gunicorn $PROJECT"
}
post {
always {
cleanWs()
}
}
}
stage('Test Deploy Agent 2') {
agent { label '***********' }
steps {
script {
// Use withCredentials to securely inject the GitHub credentials
withCredentials([usernamePassword(credentialsId: 'jenkins-github-test', usernameVariable: 'GITHUB_USER', passwordVariable: 'GITHUB_TOKEN')]) {
// Clone the repository using the provided credentials
sh """
git clone https://\$GITHUB_USER:\$GITHUB_TOKEN@\$GITHUB_REPO \$WORKSPACE/***********
"""
}
sh "rsync --exclude='.git/' -q $WORKSPACE/***********/ $PROJECT"
sh "chgrp -R gunicorn $PROJECT"
}
}
post {
always {
cleanWs()
}
}
}
}
}
}
}
code
Reinicie o Jenkins após adicionar o usuário Jenkins ao grupo gunicorn.