[DOCKER] Permettez-moi de faire le développement à distance VS Code + le développement Java dans un environnement proxy

Salut **.

Du coup, vous souhaitez développer avec VS Code et l'environnement d'exécution est Java dans un conteneur. Mais il y en a qui font obstacle. Oui, c'est Proxy.

Dans le cas d'un proxy interne, je pense que la situation est différente pour chaque entreprise, mais à titre d'exemple réussi, si cela vous aide un peu ...

: muscle: Motivation

: ordinateur: environnement de contrôle de fonctionnement (hôte)

: hand_splayed: Prémisse

: dossier_fichier: fichiers à préparer

Dockerfile

Cliquez ici pour Dockerfile dans l'environnement de développement à distance.

${workspaceFolder}/.devcontainer/Dockerfile


FROM adoptopenjdk/openjdk11:jdk-11.0.7_10-centos

# This Dockerfile adds a non-root user with sudo access. Use the "remoteUser"
# property in devcontainer.json to use it. On Linux, the container user's GID/UIDs
# will be updated to match your local UID/GID (when using the dockerFile property).
# See https://aka.ms/vscode-remote/containers/non-root-user for details.
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=${USER_UID}

ARG MAVEN_VERSION=3.6.1
ARG MAVEN_SHA=b4880fb7a3d81edd190a029440cdf17f308621af68475a4fe976296e71ff4a4b546dd6d8a58aaafba334d309cc11e638c52808a4b0e818fc0fd544226d952544

#Paramètres du proxy
# devcontainer.Spécifiez avec json
# see https://code.visualstudio.com/docs/remote/containers-advanced#_option-2-use-an-env-file
ARG PROXY=${PROXY}
ENV http_proxy=${PROXY}
ENV https_proxy=${PROXY}
ENV HTTP_PROXY=${PROXY}
ENV HTTPS_PROXY=${PROXY}

RUN echo "building..." \
    #
    # Create a non-root user to use if preferred
    # see https://aka.ms/vscode-remote/containers/non-root-user.
    && groupadd --gid ${USER_GID} ${USERNAME} \
    && useradd -s /bin/bash --uid ${USER_UID} --gid ${USER_GID} -m ${USERNAME} \
    #
    # Install Maven
    && mkdir -p /usr/share/maven /usr/share/maven/ref \
    && curl -fsSL -o /tmp/apache-maven.tar.gz https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
    && echo "${MAVEN_SHA} /tmp/apache-maven.tar.gz" | sha512sum -c - \
    && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
    && rm -f /tmp/apache-maven.tar.gz \
    && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn \
    #
    # Maven User Settings
    # /home/vscode/.m2/Créer et changer le propriétaire en utilisateur vscode
    && mkdir /home/${USERNAME}/.m2 \
    && chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.m2

#Réglage du chemin Maven
ENV MAVEN_HOME /usr/share/maven

J'utilise Maven pour le développement, donc j'ai Maven installé. De plus, comme l'environnement d'exécution de la production est la série «CentOS 7», l'environnement de développement à distance utilise également la série «CentOS 7» + Java comme image de base.

Il y a $ {PROXY}, mais cela est passé de devcontainer.json décrit plus tard lors de la construction de l'image. Je pensais que ce serait un peu une intégration dans l'image au moment de la construction, mais comme je n'ai pas l'intention de partager l'image directement dans l'environnement de développement de chaque personne, j'ai décidé qu'il n'y aurait pas de problème dans cet état.

devcontainer.json

Vient ensuite le fichier de configuration de l'environnement de développement à distance devcontainer.json.

json-doc:${workspaceFolder}/.devcontainer/devcontainer.json


{
  "name": "Sample Project",
  "dockerFile": "Dockerfile",

  //Paramètres au moment de la construction du docker (création d'image)
  // see - https://github.com/microsoft/vscode-remote-release/issues/46
  "build": {
    "args": {
      // TODO:Décrit en fonction de l'environnement
      "PROXY": "http://USER:PASS@HOST:PORT"
    }
  },

  //Paramètres par défaut du code VS lors de la création d'un conteneur (notez que les paramètres de l'espace de travail gagnent)
  "settings": { 
    "terminal.integrated.shell.linux": "/bin/bash",
    "java.home": "/opt/java/openjdk",
    // Language Server
    // see - https://github.com/redhat-developer/vscode-java/wiki/Using-a-Proxy
    // TODO:Décrit en fonction de l'environnement
    "java.jdt.ls.vmargs": "-Dhttp.proxyHost=HOST -Dhttp.proxyPort=PORT -Dhttp.proxyUser=USER -Dhttp.proxyPassword=PASS -Dhttps.proxyHost=HOST -Dhttps.proxyPort=PORT -Dhttps.proxyUser=USER -Dhttps.proxyPassword=PASS",
    // see - https://github.com/redhat-developer/vscode-java/issues/399#issuecomment-355113311
    "java.import.gradle.enabled": false
  },

  //Extension VS Code installée lors de la création du conteneur (spécifié par ID)
  "extensions": [
    // Java
    "vscjava.vscode-java-pack",  // Java Extension Pack
  ],

  //Commandes exécutées après la création du conteneur
  "postCreateCommand": "./.devcontainer/postCreateCommand.sh",

  // Use 'forwardPorts' to make a list of ports inside the container available locally.
  "forwardPorts": [
    8090 // app
  ],

  //Utilisateur de connexion au conteneur Docker
  "remoteUser": "vscode",
}

Le point est «java.jdt.ls.vmargs» dans «settings». Comme vous pouvez le voir sur la page ci-dessous, il semble que vous deviez définir PROXY pour Java Language Server.

Using a Proxy - redhat-developer/vscode-java - GitHub

Fichier de configuration Maven

Maven configure les paramètres Proxy dans Maven.

J'ai mis ces fichiers dans le dossier .devcontainer. Copiez-le dans le dossier .m2 ( / home / vscode / .m2) directement sous la page d'accueil de l'utilisateur vscode avec le shell décrit plus loin.

settings.xml


<proxies>
  <proxy>
    <!-- TODO:Décrit en fonction de l'environnement-->
    <id>sample</id>
    <active>true</active>
    <protocol>http</protocol>
    <host>proxy.sample.com</host>
    <port>1234</port>
    <username>user</username>
    <password>{encrypted-password=}</password>
    <nonProxyHosts>localhost</nonProxyHosts>
  </proxy>
</proxies>

settings-security.xml


<?xml version="1.0" encoding="UTF-8"?>
<settingsSecurity>
    <!-- TODO:Décrit en fonction de l'environnement-->
    <master>{encrypted-master-password=}</master>
</settingsSecurity>

Référence: Password Encryption --Maven

coquille

sh:${workspaceFolder}/.devcontainer/postCreateCommand.sh


#!/usr/bin/bash

#Traitement initial
echo ''
echo '--------------------------------------------'
echo ' Init'
echo '--------------------------------------------'
#Paramètres / informations de base
MAVEN_SETTING_DEST=`realpath ~/.m2/`
echo 'Informations de base'
echo "Directeur de travail: `pwd`"
echo "maven: `mvn --version`"

#Copier le fichier de configuration Maven
echo ''
echo '--------------------------------------------'
echo ' Copy Maven settings files'
echo '--------------------------------------------'
echo 'La copie commencera.'
cp ./.devcontainer/settings.xml ./.devcontainer/settings-security.xml ${MAVEN_SETTING_DEST}
echo 'La copie est terminée.'
ls -la ${MAVEN_SETTING_DEST}

#Terminer le traitement
echo ''
echo '--------------------------------------------'
echo ' Exit'
echo '--------------------------------------------'
echo 'Le processus se termine.'
exit 0

Le shell spécifié par postCreateCommand dans .devcontainer / devcontainer.json. Il est atteint après la création du conteneur.

En ce qui concerne le contenu, nous avons copié les fichiers de paramètres Maven dans le dossier .m2 ( / home / vscode / .m2) directement sous la page d'accueil de l'utilisateur vscode. Si c'est tout, je pense que vous devriez l'écrire directement dans postCreateCommand de devcontainer.json sans le couper dans le shell ...: angel:

: fusée: démarrer

Tout ce que vous avez à faire est de le démarrer normalement! Je vais omettre les détails car il est différent de la ligne principale, mais en gros ...

--Installez l'extension VS Code Remote --Containers (vscode: extension / ms-vscode-remote.remote-containers) et

n'est-ce pas!

À ce stade, il semble que le dossier .devcontainer devrait être directement sous le dossier racine de l'espace de travail VS Code.

: end: à la fin

Au fait ... je n'avais pas assez de spécifications de machine, alors j'ai finalement abandonné le développement avec cette méthode: angel: Cependant, je pense que c'est très pratique car cela facilite la création de l'environnement à la fois, donc s'il n'y a pas de problème avec les spécifications, je pense que vous devriez certainement le considérer positivement!

J'espère que cela aide les gens qui sont dans l'environnement Proxy + VS Code Remote Development + Java.

Eh bien!

: lien: lien

Recommended Posts

Permettez-moi de faire le développement à distance VS Code + le développement Java dans un environnement proxy
Environnement Java Spring dans vs Code
Environnement de développement Java (Mac, VS Code)
Préparer l'environnement de développement Java avec VS Code
Créer un environnement de développement Java avec VS Code
Créer un environnement de développement Java avec VS Code sur Mac
Comment créer un environnement de développement Java avec VS Code
Construction d'environnement de développement d'applications Web Java avec VS Code (struts2)
Environnement de développement d'applications Java créé dans un environnement VM
Environnement de développement Java
Points bloqués dans la création d'un environnement de développement VS Code et Java
[Débutant] Installez l'outil de développement java dans l'environnement de développement cloud9.
[Mac] Installer Java dans Visual Studio Code (VS Code)
Mémo de l'environnement de développement Java
N'écrivez pas de code si (isAdmin == true) en Java
construction d'environnement de développement Java
Créer un environnement de développement de programme Java avec Visual Studio Code
Construction d'environnement de développement d'applications Web en Java (pour les personnes inexpérimentées)
L'histoire de l'utilisation de Java Input Wait (Scanner) avec VSCode
[Journal de développement ⑬] Ne laissez pas 0 être entré dans le formulaire !!
Créer un environnement de développement Web APP avec Java + Spring avec Visual Studio Code
Environnement de développement Java (Mac, Eclipse)
Construction de l'environnement JavaFX dans Java 13
Java avec Visual Studio Code
Écrire du code de type Java8 en Java8
Premier développement Java dans Eclipse
[Eclipse Java] Mémo des paramètres de l'environnement de développement
Faites Option.ou Null de Scala en Java
Faites HelloWorld avec Java / IntelliJ / Gradle
Préparer l'environnement de développement Java avec Atom
Création de l'environnement de développement Play Framework 2.6 (Java)
[Java] N'utilisez pas "+" dans append!
À propos de l'environnement de développement actuel (Java 8)
Construire Java avec Mac vs Code
Création d'un environnement de développement Java (pour Mac)
Utilisez-vous Stream en Java?
Installer l'environnement de développement Java sur Mac
Construction d'environnement de développement JSP + Eclipse + Jetty que même les débutants en Java peuvent faire
Un enregistrement de la configuration d'un environnement de développement Java avec Visual Studio Code
Essayez le débogage à distance Java avec des conteneurs distants dans Visual Studio Code Insiders