gpt4 book ai didi

docker - Jenkins-Docker与PHP的并行阶段

转载 作者:行者123 更新时间:2023-12-02 19:29:13 24 4
gpt4 key购买 nike

我是Jenkins的新手,我想为我的一个PHP项目获得与GitLab CI几乎相同的行为。

我使用Docker在多个PHP版本上测试我的项目。

我想要的是 ?

并行运行构建和测试。

  • Build创建我的应用程序,源代码来自git存储库,然后运行composer install命令。
  • Dockerfile存储在/var/lib/jenkins/Docker
  • 我的Dockerfile有一个参数(PHP_VERSION),它允许我选择想要的PHP版本
  • customWorkspace似乎可以工作

  • 这是我的Jenkinsfile这样做:
    updateGitlabCommitStatus name: 'build', state: 'pending'

    pipeline {
    agent none
    post {
    failure {
    updateGitlabCommitStatus name: 'build', state: 'failed'
    }
    success {
    updateGitlabCommitStatus name: 'build', state: 'success'
    }
    }
    stages {

    stage('build') {

    parallel {
    stage('build-php5.4') {
    agent {
    dockerfile {
    additionalBuildArgs '--build-arg PHP_VERSION=54'
    dir '/var/lib/jenkins/Docker'
    customWorkspace './build-php5.4'
    }
    }
    steps {
    sh 'pwd'
    sh 'ls'
    sh 'rm -Rf composer.lock vendor'
    sh 'composer install'
    }
    }

    stage('build-php7.0') {
    agent {
    dockerfile {
    additionalBuildArgs '--build-arg PHP_VERSION=70'
    dir '/var/lib/jenkins/Docker'
    customWorkspace './build-php7.0'
    }
    }
    steps {
    sh 'pwd'
    sh 'rm -Rf composer.lock vendor'
    sh 'composer install'
    }
    }
    }

    }

    stage('tests') {

    parallel {
    stage('test-php5.4') {
    agent {
    dockerfile {
    additionalBuildArgs '--build-arg PHP_VERSION=54'
    dir '/var/lib/jenkins/Docker'
    customWorkspace './build-php5.4'
    }
    }
    steps {
    sh 'pwd'
    sh 'php --version'
    sh 'php vendor/phpunit/phpunit/phpunit tests'
    }
    }

    stage('test-php7.0') {
    agent {
    dockerfile {
    additionalBuildArgs '--build-arg PHP_VERSION=70'
    dir '/var/lib/jenkins/Docker'
    customWorkspace './build-php7.0'
    }
    }
    steps {
    sh 'pwd'
    sh 'php --version'
    sh 'php vendor/phpunit/phpunit/phpunit tests'
    }
    }
    }
    }
    }
    }

    结果如下:

    enter image description here

    看起来不错,但事实并非如此,而且我不太了解潜在的行为。

    如您所见,test-php54阶段使用最后创建的Docker容器:

    enter image description here

    我确信我在很多步骤上都错了,但是您认为我可以这样做吗?

    最佳答案

    好的,我发现了主要问题。

    事实是我使用相同的Dockerfile,但参数不同。
    如果我为PHP 5.4创建一个Dockerfile,为PHP 7.0创建另一个,则可以正确并行化各个阶段。

    updateGitlabCommitStatus name: 'build', state: 'pending'

    pipeline {
    agent none
    post {
    failure {
    updateGitlabCommitStatus name: 'build', state: 'failed'
    }
    success {
    updateGitlabCommitStatus name: 'build', state: 'success'
    }
    }
    stages {

    stage('build') {

    parallel {
    stage('build-php5.4') {
    agent {
    dockerfile {
    dir '/var/lib/jenkins/Docker'
    filename 'Dockerfile-php5.4'
    customWorkspace './build-php5.4'
    }
    }
    steps {
    sh 'rm -Rf composer.lock vendor'
    sh 'composer install'
    }
    }

    stage('build-php7.0') {
    agent {
    dockerfile {
    dir '/var/lib/jenkins/Docker'
    filename 'Dockerfile-php7.0'
    customWorkspace './build-php7.0'
    }
    }
    steps {
    sh 'rm -Rf composer.lock vendor'
    sh 'composer install'
    }
    }
    }

    }

    stage('tests') {

    parallel {
    stage('test-php5.4') {
    agent {
    dockerfile {
    dir '/var/lib/jenkins/Docker'
    filename 'Dockerfile-php5.4'
    customWorkspace './build-php5.4'
    }
    }
    steps {
    sh 'php --version'
    sh 'php vendor/phpunit/phpunit/phpunit tests'
    }
    }

    stage('test-php7.0') {
    agent {
    dockerfile {
    dir '/var/lib/jenkins/Docker'
    filename 'Dockerfile-php7.0'
    customWorkspace './build-php7.0'
    }
    }
    steps {
    sh 'php --version'
    sh 'php vendor/phpunit/phpunit/phpunit tests'
    }
    }
    }
    }
    }
    }

    这似乎有效! :)

    关于docker - Jenkins-Docker与PHP的并行阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53263101/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com