

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Spécification de deux environnements d'exécution
<a name="sample-runtime-two-major-version-runtimes"></a>

Vous pouvez spécifier plusieurs environnements d'exécution dans le même projet de CodeBuild construction. Cet exemple de projet utilise deux fichiers sources : l'un qui utilise l'environnement d'exécution Go et l'autre qui utilise l'environnement d'exécution Node.js. 

1. Créez un répertoire nommé `my-source`. 

1. Dans le répertoire `my-source`, créez un répertoire nommé `golang-app`. 

1. Créez un fichier nommé `hello.go` avec les contenus suivants. Stockez le fichier dans le répertoire `golang-app`. 

   ```
   package main
   import "fmt"
   
   func main() {
     fmt.Println("hello world from golang")
     fmt.Println("1+1 =", 1+1)
     fmt.Println("7.0/3.0 =", 7.0/3.0)
     fmt.Println(true && false)
     fmt.Println(true || false)
     fmt.Println(!true)
     fmt.Println("good bye from golang")
   }
   ```

1. Dans le répertoire `my-source`, créez un répertoire nommé `nodejs-app`. Il doit être au même niveau que le répertoire `golang-app`. 

1. Créez un fichier nommé `index.js` avec les contenus suivants. Stockez le fichier dans le répertoire `nodejs-app`. 

   ```
   console.log("hello world from nodejs");
   console.log("1+1 =" + (1+1));
   console.log("7.0/3.0 =" + 7.0/3.0);
   console.log(true && false);
   console.log(true || false);
   console.log(!true);
   console.log("good bye from nodejs");
   ```

1. Créez un fichier nommé `package.json` avec les contenus suivants. Stockez le fichier dans le répertoire `nodejs-app`. 

   ```
   {
     "name": "mycompany-app",
     "version": "1.0.0",
     "description": "",
     "main": "index.js",
     "scripts": {
       "test": "echo \"run some tests here\""
     },
     "author": "",
     "license": "ISC"
   }
   ```

1. Créez un fichier nommé `buildspec.yml` avec les contenus suivants. Stockez le fichier dans le répertoire `my-source`, au même niveau que les répertoires `nodejs-app` et `golang-app`. La `runtime-versions` section spécifie les environnements d'exécution de Node.js version 12 et Go version 1.13. 

   ```
   version: 0.2
   
   phases:
     install:
       runtime-versions:
         golang: 1.13
         nodejs: 12
     build:
       commands:
         - echo Building the Go code...
         - cd $CODEBUILD_SRC_DIR/golang-app
         - go build hello.go 
         - echo Building the Node code...
         - cd $CODEBUILD_SRC_DIR/nodejs-app
         - npm run test
   artifacts:
     secondary-artifacts:
       golang_artifacts:
         base-directory: golang-app
         files:
           - hello
       nodejs_artifacts:
         base-directory: nodejs-app
         files:
           - index.js
           - package.json
   ```

1. La structure de votre fichier devrait maintenant ressembler à ceci. 

   ```
   my-source
   ├── golang-app
   │   └── hello.go
   ├── nodejs.app
   │   ├── index.js
   │   └── package.json
   └── buildspec.yml
   ```

1. Téléchargez le contenu du `my-source` répertoire dans un compartiment d'entrée S3 ou un CodeCommit référentiel Bitbucket. GitHub
**Important**  
 Si vous utilisez un compartiment d'entrée S3, veillez à créer un fichier ZIP qui contient la structure de répertoire et les fichiers, puis chargez ce fichier dans le compartiment d'entrée. N'ajoutez pas `my-source` au fichier ZIP, mais seulement les répertoires et les fichiers dans `my-source`.

1. Ouvrez la AWS CodeBuild console sur [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Créez un projet de génération. Pour plus d’informations, consultez [Création d'un projet de génération (console)](create-project.md#create-project-console) et [Exécution d'une génération (console)](run-build-console.md). Laissez tous les paramètres avec leurs valeurs par défaut, sauf pour ces paramètres.
   + Pour **Environnement** :
     + Pour **Image d'environnement**, choisissez **Managed image (Image gérée)**.
     + Pour **Operating system (Système d'exploitation)**, choisissez **Amazon Linux 2**.
     + Pour **Runtime(s) (Exécution(s))**, sélectionnez **Standard**.
     + Pour **Image**, choisissez **aws/codebuild/amazonlinux-x86\$164-standard:4.0**.

1. Choisissez **Créer un projet de génération**. 

1. Choisissez **Démarrer la génération**. 

1. Dans **Configuration de la génération**, acceptez les valeurs par défaut, puis choisissez **Démarrer la génération**. 

1. Une fois que la génération est terminée, affichez sa sortie dans l'onglet **Journaux de génération**. Vous devez visualiser des résultats similaires à ce qui suit. Ils montrent la sortie des environnements d'exécution Go et Node.js. Ils montrent également la sortie des applications Go et Node.js. 

   ```
   [Container] Date Time Processing environment variables
   [Container] Date Time Selecting 'golang' runtime version '1.13' based on manual selections...
   [Container] Date Time Selecting 'nodejs' runtime version '12' based on manual selections...
   [Container] Date Time Running command echo "Installing Go version 1.13 ..."
   Installing Go version 1.13 ... 
    
   [Container] Date Time Running command echo "Installing Node.js version 12 ..." 
   Installing Node.js version 12 ... 
    
   [Container] Date Time Running command n $NODE_12_VERSION
      installed : v12.20.1 (with npm 6.14.10)
   
   [Container] Date Time Moving to directory /codebuild/output/src819694850/src
   [Container] Date Time Registering with agent
   [Container] Date Time Phases found in YAML: 2
   [Container] Date Time  INSTALL: 0 commands
   [Container] Date Time  BUILD: 1 commands
   [Container] Date Time Phase complete: DOWNLOAD_SOURCE State: SUCCEEDED
   [Container] Date Time Phase context status code:  Message:
   [Container] Date Time Entering phase INSTALL
   [Container] Date Time Phase complete: INSTALL State: SUCCEEDED
   [Container] Date Time Phase context status code:  Message:  
   [Container] Date Time Entering phase PRE_BUILD 
   [Container] Date Time Phase complete: PRE_BUILD State: SUCCEEDED 
   [Container] Date Time Phase context status code:  Message:  
   [Container] Date Time Entering phase BUILD 
   [Container] Date Time Running command echo Building the Go code... 
   Building the Go code... 
    
   [Container] Date Time Running command cd $CODEBUILD_SRC_DIR/golang-app 
    
   [Container] Date Time Running command go build hello.go 
    
   [Container] Date Time Running command echo Building the Node code... 
   Building the Node code... 
    
   [Container] Date Time Running command cd $CODEBUILD_SRC_DIR/nodejs-app 
    
   [Container] Date Time Running command npm run test 
    
   > mycompany-app@1.0.0 test /codebuild/output/src924084119/src/nodejs-app 
   > echo "run some tests here" 
    
   run some tests here
   ```