Modifiez la valeur du paramètre pour chaque environnement avec Digdag (RubyOnRails)

À propos de Digdag

Getting started Architecture Concepts Workflow definition Scheduling workflow Operators Command reference Language API -Ruby Modifiez la valeur du paramètre pour chaque environnement avec Digdag (RubyOnRails) Implémentation par lots dans l'environnement RubyOnRails à l'aide de Digdag

Choses à faire

Je vais créer un fichier de paramètres d'environnement au format YAML pour Digdag dans l'exemple d'application du didacticiel Ruby on Rails, obtenir la variable d'environnement de la tâche Ruby, la définir dans la variable d'environnement Digdag et vérifier jusqu'à ce que je puisse obtenir la variable d'environnement Digdag à partir d'une autre tâche Ruby. ..

L'exemple de code d'application pour le didacticiel Ruby on Rails n'est pas pertinent pour cette discussion, mais nous allons le charger et ajouter le flux de travail Digdag à ce projet pour une utilisation dans la prochaine implémentation par lots.

Télécharger un exemple d'application pour le didacticiel Ruby on Rails

https://github.com/yasslab/sample_app スクリーンショット 2020-07-15 23.06.34.png

génération de flux de travail

$ digdag init workflow
$ cd workflow
$ digdag run workflow.dig

Si le résultat suivant s'affiche, il n'y a pas de problème avec l'environnement Workflow de Digdag ~

résultat


2020-07-15 22:01:56 +0900 [INFO](0017@[0:default]+workflow+setup): echo>: start 2020-07-15T00:00:00+00:00
start 2020-07-15T00:00:00+00:00
2020-07-15 22:01:57 +0900 [INFO](0017@[0:default]+workflow+disp_current_date): echo>: 2020-07-15 00:00:00 +00:00
2020-07-15 00:00:00 +00:00
2020-07-15 22:01:57 +0900 [INFO](0017@[0:default]+workflow+repeat): for_each>: {order=[first, second, third], animal=[dog, cat]}
2020-07-15 22:01:57 +0900 [INFO](0018@[0:default]+workflow+repeat^sub+for-0=order=0=first&1=animal=1=cat): echo>: first cat
first cat
2020-07-15 22:01:57 +0900 [INFO](0019@[0:default]+workflow+repeat^sub+for-0=order=1=second&1=animal=0=dog): echo>: second dog
second dog
2020-07-15 22:01:58 +0900 [INFO](0020@[0:default]+workflow+repeat^sub+for-0=order=1=second&1=animal=1=cat): echo>: second cat
second cat
2020-07-15 22:01:58 +0900 [INFO](0022@[0:default]+workflow+repeat^sub+for-0=order=2=third&1=animal=1=cat): echo>: third cat
third cat
2020-07-15 22:01:58 +0900 [INFO](0021@[0:default]+workflow+repeat^sub+for-0=order=2=third&1=animal=0=dog): echo>: third dog
third dog
2020-07-15 22:01:58 +0900 [INFO](0017@[0:default]+workflow+repeat^sub+for-0=order=0=first&1=animal=0=dog): echo>: first dog
first dog
2020-07-15 22:01:58 +0900 [INFO](0017@[0:default]+workflow+teardown): echo>: finish 2020-07-15T00:00:00+00:00
finish 2020-07-15T00:00:00+00:00

Créer un fichier de variable d'environnement au format YAML

$ cd workflow
$ mkdir config
$ vi environment.yml

J'ai défini l'url, l'utilisateur, le mot de passe pour chaque développement, mise en scène et production. Parcourez cette variable d'environnement à partir de la tâche Digdag.

environment.yml


development:
  url: development.jp
  user: development_user
  password: development_password

staging:
  url: staging.jp
  user: staging_user
  password: staging_password
  
production:
  url: procuction.jp
  user: procuction_user
  password: procuction_password

Créez une classe Ruby qui définit les variables d'environnement du fichier YAML sur les variables d'environnement de Digdag.

workflowSous le dossiertasksCréer un dossier Créez-y environment.rb. Cette classe lit les variables d'environnement à partir du fichier YAML et les enregistre dans les variables d'environnement Digdag.

$ cd workflow
$ mkdir tasks

environment.rb


require 'yaml'

class Environment
  def load
    environment = Digdag.env.params['environment']
    environment = case environment
                  when 'stg'
                    'staging'
                  when 'prd'
                    'production'
                  else
                    'development'
                  end

    #Obtenez les variables d'environnement de l'environnement correspondant
    config = YAML.load_file('config/environment.yml')[environment]
    config.each do |key, value|
      #Enregistrer dans la variable d'environnement Digdag
      Digdag.env.store(key.to_sym => value)
    end
  end
end

Ajouter une tâche à Workflow.dig

$ digdag init workflowSupprimez le code généré automatiquement et ajoutez le code suivant

workflow.dig


timezone: UTC

+load_environment:
  rb>: Environment.load
  require: 'tasks/environment'
+print_environment_value:
  sh>: echo url:${url} user:${user} password:${password}
+print_ruby:
  rb>: DigdagEnvironment.show
  require: 'tasks/digdag_environment'

■ Tâche load_environment: tâche permettant de définir la variable d'environnement correspondante sur la variable d'environnement Digdag à partir des paramètres d'environnement lorsque Digdag est exécuté. ■ print_environment_value: tâche qui génère des variables d'environnement Digdag à partir d'une tâche shell ■ print_ruby: tâche de sortie des variables d'environnement Digdag à partir de la classe Ruby

Essayez de l'exécuter à partir de l'environnement de développement.

$digdag run workflow.dig -p environment=development --rerun

Résultat d'exécution dans l'environnement de développement


2020-07-15 22:49:35 +0900 [INFO](0017@[0:default]+workflow+load_environment): rb>: Environment.load
2020-07-15 22:49:35 +0900 [INFO](0017@[0:default]+workflow+print_environment_value): sh>: echo url:development.jp user:development_user password:development_password
url:development.jp user:development_user password:development_password
2020-07-15 22:49:36 +0900 [INFO](0017@[0:default]+workflow+print_ruby): rb>: DigdagEnvironment.show
url: development.jp
user: development_user
password: development_password

Vient ensuite l'environnement Staging

$digdag run workflow.dig -p environment=stg --rerun

Résultat d'exécution dans un environnement de préparation


2020-07-15 22:55:33 +0900 [INFO](0017@[0:default]+workflow+load_environment): rb>: Environment.load
2020-07-15 22:55:33 +0900 [INFO](0017@[0:default]+workflow+print_environment_value): sh>: echo url:staging.jp user:staging_user password:staging_password
url:staging.jp user:staging_user password:staging_password
2020-07-15 22:55:34 +0900 [INFO](0017@[0:default]+workflow+print_ruby): rb>: DigdagEnvironment.show
url: staging.jp
user: staging_user
password: staging_password

Enfin l'environnement de production

$digdag run workflow.dig -p environment=prd --rerun

Résultat d'exécution dans l'environnement de production


2020-07-15 22:56:30 +0900 [INFO](0017@[0:default]+workflow+load_environment): rb>: Environment.load
2020-07-15 22:56:30 +0900 [INFO](0017@[0:default]+workflow+print_environment_value): sh>: echo url:procuction.jp user:procuction_user password:procuction_password
url:procuction.jp user:procuction_user password:procuction_password
2020-07-15 22:56:31 +0900 [INFO](0017@[0:default]+workflow+print_ruby): rb>: DigdagEnvironment.show

Maintenant que les paramètres de la variable d'environnement sont terminés, je vais essayer de créer un lot avec les données de l'application du didacticiel RubyOnRails de la prochaine fois.

Recommended Posts

Modifiez la valeur du paramètre pour chaque environnement avec Digdag (RubyOnRails)
Changez la cible d'injection pour chaque environnement avec Spring Boot 2
Spécifiez le délai d'expiration pour chaque chemin avec Rack :: Timeout
Préparer l'environnement pour java11 et javaFx avec Ubuntu 18.4
[Android] Modifiez le nom de l'application et l'icône de l'application pour chaque saveur
[Rails] Comment changer le titre de la page du navigateur pour chaque page
Paramètre JAVA_HOME pour les chemins avec des espaces
Construction d'environnement avec Docker pour les débutants
Problèmes auxquels j'étais accro lors de la création de l'environnement digdag avec docker
Modifier le fuseau horaire par défaut de l'application rails
Préparer l'environnement de format pour "Rails" (VScode)
Préparer l'environnement de contrôle de sécurité pour Rails 6
Changer la disposition lors de la rotation avec onConfigurationChanged
Implémentation par lots dans l'environnement RubyOnRails à l'aide de Digdag