Невозможно установить роли ansible-galaxy из Jenksinfile для создания и развертывания инфраструктуры с ролями, на которые ссылаются (git) scm.

У меня есть следующий jenkinsfile

pipeline {
    agent {
        dockerfile {
            args "-u root -v /var/run/docker.sock:/var/run/docker.sock"
        }
    }
    environment {
        ESXI_CREDS = credentials('ESXI_CREDS')
        PACKER_LOG = 1
    }
    stages {
        stage('Build Base image') {
            steps {
               sh "ansible-galaxy install -r ./requirements.yml"
        }
    }
}

ссылка.yml

- src:     
  ssh://tfsserver/_git/ansible-sshd
  scm: git
  name: ansible-sshd

Который использует следующий Dockerfile

FROM hashicorp/packer:full

RUN apk --no-cache add git openssh-client rsync jq py2-pip py-boto py2-six py2-cryptography py2-bcrypt py2-asn1crypto py2-jsonschema py2-pynacl py2-asn1 py2-markupsafe py2-paramiko py2-dateutil py2-docutils py2-futures py2-rsa py2-libxml2 libxml2 libxslt && \
    apk --no-cache add gcc python2-dev musl-dev linux-headers libxml2-dev libxslt-dev && \
    pip install ansible jsonmerge awscli boto3 hvac ansible-modules-hashivault molecule python-gilt python-jenkins lxml openshift docker docker-compose mitogen yamale ansible-lint && \
    apk del gcc python2-dev musl-dev linux-headers libxml2-dev libxslt-dev

USER root

ENTRYPOINT []

При запуске сборки jensfile выше он застревает при аутентификации на нашем сервере tfs и получает следующую ошибку.

+ ansible-galaxy install -r ./requirements.yml
[WARNING]: - ansible-sshd was NOT installed successfully: - command
/usr/bin/git clone
ssh://tfsserver/_git/ansible-sshdtmp5VN20Z (rc=128)
ERROR! - you can use --ignore-errors to skip failed roles and finish processing the list.

Я использую git с tfs, и я не знаю, как я могу аутентифицировать агента с помощью репозитория git, а также действительно не хочу хранить закрытый ключ в агенте сборки и сопоставлять его с док-контейнером, даже не уверен если бы это сработало, я даже пытался динамически добавлять закрытый ключ в контейнер во время сборки, но, похоже, он не работает.

 withCredentials([sshUserPrivateKey(credentialsId: 'tfs', keyFileVariable: 'keyfile')]) {
   sh "mkdir -p ~/.ssh && cp ${keyfile} ~/.ssh/id_rsa"
   sh "ansible-galaxy install -r ./requirements.yml"
 }

person Madu Alikor    schedule 26.07.2019    source источник


Ответы (1)


У меня была такая же проблема, но в итоге я решил использовать sed.

withCredentials([usernamePassword(credentialsId: 'GIT_AUTHENTICATION', passwordVariable: 'password', usernameVariable: 'username')])
{
    sh "sed -i 's/${git_url}/${username}:${password}@${git_url}/g' roles/requirements.yml"
    sh "ansible-galaxy install -c -r roles/requirements.yml -p roles/"
    sh "ansible-playbook site.yml -i ${inventory}"
}

Большинство удаленных репозиториев допускают аутентификацию по URL-адресу или URL-адрес токена oAuth, оба работают одинаково:

{протокол}://${имя пользователя}:${пароль}@{gitl_url}/${репозиторий}

пример:

https://username:[email protected]/username/repository.git

Если в вашем пароле есть специальные символы, используйте https://www.urlencoder.org/ и не забудьте использовать его с withCredentials, чтобы скрыть конфиденциальные данные.

person Jroger    schedule 03.09.2019