Wiki.js

Jenkinsfile with build arg for static API

Add ARG somewhere in Dockerfile


ARG ACTION_CABLE_URL

and the Jenkinsfile itself:

node {
  def repo = "";
  def configs_repo = ""
  def creds = "gitlab-ssh";
  def branch = (env.gitlabMergeRequestLastCommit) ? env.gitlabMergeRequestLastCommit : "${env.BRANCH}";
  def project = "";
  def project_hub = "";
  def image_tag = "${env.environment}";
  def envs = [];
  def build_arg = 'ACTION_CABLE_URL';
  def build_arg_value = '';
  
  
    stage ("Get app code") {
      dir ("build") {
        checkout scm: [$class: 'GitSCM',
                 userRemoteConfigs: [[url: "${repo}", credentialsId: "${creds}"]],
                 branches: [[name: "${branch}"]]], changelog: false, poll: false
                 def commitHash = sh(returnStdout: true, script: 'git rev-parse HEAD').trim().take(7)
                 }
    }

    stage("Get configs") {
        dir ("configs") {
            checkout scm: [$class: 'GitSCM',
                 userRemoteConfigs: [[url: "${configs_repo}", credentialsId: "${creds}"]],
                 branches: [[name: "master"]]], changelog: false, poll: false
                 def commitHash = sh(returnStdout: true, script: 'git rev-parse HEAD').trim().take(7)
            }
                 
        dir("build") {
            //Get .env file
           configFileProvider(
                  [configFile(fileId: "${env.environment}-env", variable: 'envs')]) {
                   sh 'cp ${envs} ./.env';
           }

           for (String i : readFile('.env').split("\r?\n")) {
                if(i != "") {
                    envs.push(i);
                }
                if(i.indexOf(build_arg) != -1) {
                    build_arg_value = i;
                }
            }            

            sh "cp ../configs/Backend.Dockerfile ./Backend.Dockerfile";
            sh "cp ../configs/configs/database.yml ./config/database.yml";
            sh "cp ../configs/configs/entrypoint.sh ./config/entrypoint.sh";
            sh "cp ../configs/configs/sidekiq.yml ./config/sidekiq.yml";
            sh "cp ../configs/docker-compose.yml ./docker-compose.yml"
                        
        }
    }
    
    //build backend container
    stage ("Build Backend Image") {
          dir ("build") {
                def build_args = build_arg_value ? "--build-arg ${build_arg_value}" : "";
                def customImage = docker.build ("${project_hub}/${project}/backend:${image_tag}", "${build_args} -f Backend.Dockerfile .");
                sh "docker push ${project_hub}/${project}/backend:${image_tag}" ;
            }
    }    
    
    //deploy app on swarm
    stage ("Deploy App") {
        dir ("build") {
            
           def jenvs = envs.join(" --env-add ");
           
           shCommand("docker pull ${project_hub}/${project}/backend:${image_tag}");
           
           shCommand("docker service update --env-add ${jenvs} --force --image ${project_hub}/${project}/backend:${image_tag} ${project}_backend");            
           shCommand("docker service update --env-add ${jenvs} --force --image ${project_hub}/${project}/backend:${image_tag} ${project}_sidekiq");
           shCommand("docker service update --env-add ${jenvs} --force --image ${project_hub}/${project}/backend:${image_tag} ${project}_crontab");
           shCommand("docker service update --env-add ${jenvs} --force --image ${project_hub}/${project}/backend:${image_tag} ${project}_ws");
        
            
        }    
    }
    
}

def shCommand(command) {
    sshagent (credentials: ['ssh-key']) {
        sh "ssh -o StrictHostKeyChecking=no -l deploy $env.server_ip $command"
    }
}