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"
}
}