diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000000..e111ea504a --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,191 @@ +#!groovy +/* + * This Jenkinsfile is intended to run on https://ci.jenkins-ci.org and may fail anywhere else. + * It makes assumptions about plugins being installed, labels mapping to nodes that can build what is needed, etc. + * + * The required labels are "java" and "docker" - "java" would be any node that can run Java builds. It doesn't need + * to have Java installed, but some setups may have nodes that shouldn't have heavier builds running on them, so we + * make this explicit. "docker" would be any node with docker installed. + */ + +// TEST FLAG - to make it easier to turn on/off unit tests for speeding up access to later stuff. +def runTests = true + +// Only keep the 10 most recent builds. +properties([[$class: 'jenkins.model.BuildDiscarderProperty', strategy: [$class: 'LogRotator', + numToKeepStr: '50', + artifactNumToKeepStr: '20']]]) + +String packagingBranch = (binding.hasVariable('packagingBranch')) ? packagingBranch : 'master' + +timestampedNode('java') { + + // First stage is actually checking out the source. Since we're using Multibranch + // currently, we can use "checkout scm". + stage "Checkout source" + + checkout scm + + // Now run the actual build. + stage "Build and test" + + // We're wrapping this in a timeout - if it takes more than 180 minutes, kill it. + timeout(time: 180, unit: 'MINUTES') { + // See below for what this method does - we're passing an arbitrary environment + // variable to it so that JAVA_OPTS and MAVEN_OPTS are set correctly. + withMavenEnv(["JAVA_OPTS=-Xmx1536m -Xms512m -XX:MaxPermSize=1024m", + "MAVEN_OPTS=-Xmx1536m -Xms512m -XX:MaxPermSize=1024m"]) { + // Actually run Maven! + // The -Dmaven.repo.local=${pwd()}/.repository means that Maven will create a + // .repository directory at the root of the build (which it gets from the + // pwd() Workflow call) and use that for the local Maven repository. + sh "mvn -Pdebug -U clean install ${runTests ? '-Dmaven.test.failure.ignore=true -Dconcurrency=1' : '-DskipTests'} -V -B -Dmaven.repo.local=${pwd()}/.repository" + } + } + + // Once we've built, archive the artifacts and the test results. + stage "Archive artifacts and test results" + + step([$class: 'ArtifactArchiver', artifacts: '**/target/*.jar, **/target/*.war, **/target/*.hpi', fingerprint: true]) + if (runTests) { + step([$class: 'JUnitResultArchiver', healthScaleFactor: 20.0, testResults: '**/target/surefire-reports/*.xml']) + } +} + +def debFileName +def rpmFileName +def suseFileName + +// Run the packaging build on a node with the "docker" label. +timestampedNode('docker') { + // First stage here is getting prepped for packaging. + stage "packaging - docker prep" + + // Docker environment to build packagings + dir('packaging-docker') { + git branch: packagingBranch, url: 'https://github.com/jenkinsci/packaging.git' + sh 'docker build -t jenkins-packaging-builder:0.1 docker' + } + + stage "packaging - actually packaging" + // Working packaging code, separate branch with fixes + dir('packaging') { + deleteDir() + + docker.image("jenkins-packaging-builder:0.1").inside("-u root") { + git branch: packagingBranch, url: 'https://github.com/jenkinsci/packaging.git' + + try { + // Saw issues with unstashing inside a container, and not sure copy artifact plugin would work here. + // So, simple wget. + sh "wget -q ${currentBuild.absoluteUrl}/artifact/war/target/jenkins.war" + sh "make clean deb rpm suse BRAND=./branding/jenkins.mk BUILDENV=./env/test.mk CREDENTIAL=./credentials/test.mk WAR=jenkins.war" + } catch (Exception e) { + error "Packaging failed: ${e}" + } finally { + // Needed to make sure the output of the build can be deleted by later runs. + // Hackish, yes, but rpm builds as a numeric UID only user fail, so... + sh "chmod -R a+w target || true" + sh "chmod a+w jenkins.war || true" + } + dir("target/debian") { + def debFilesFound = findFiles(glob: "*.deb") + if (debFilesFound.size() > 0) { + debFileName = debFilesFound[0]?.name + } + } + + dir("target/rpm") { + def rpmFilesFound = findFiles(glob: "*.rpm") + if (rpmFilesFound.size() > 0) { + rpmFileName = rpmFilesFound[0]?.name + } + } + + dir("target/suse") { + def suseFilesFound = findFiles(glob: "*.rpm") + if (suseFilesFound.size() > 0) { + suseFileName = suseFilesFound[0]?.name + } + } + + step([$class: 'ArtifactArchiver', artifacts: 'target/**/*', fingerprint: true]) + + // Fail the build if we didn't find at least one of the packages, meaning they weren't built but + // somehow make didn't error out. + if (debFileName == null || rpmFileName == null || suseFileName == null) { + error "At least one of Debian, RPM or SuSE packages are missing, so failing the build." + } + } + + } + +} + +stage "Package testing" + +if (runTests) { + if (!env.BRANCH_NAME.startsWith("PR")) { + // NOTE: As of now, a lot of package tests will fail. See https://issues.jenkins-ci.org/issues/?filter=15257 for + // possible open JIRAs. + + // Basic parameters + String artifactName = (binding.hasVariable('artifactName')) ? artifactName : 'jenkins' + String jenkinsPort = (binding.hasVariable('jenkinsPort')) ? jenkinsPort : '8080' + + // Set up + String debfile = "artifact://${env.JOB_NAME}/${env.BUILD_NUMBER}#target/debian/${debFileName}" + String rpmfile = "artifact://${env.JOB_NAME}/${env.BUILD_NUMBER}#target/rpm/${rpmFileName}" + String susefile = "artifact://${env.JOB_NAME}/${env.BUILD_NUMBER}#target/suse/${suseFileName}" + + timestampedNode("docker") { + stage "Load Lib" + dir('workflowlib') { + deleteDir() + git branch: packagingBranch, url: 'https://github.com/jenkinsci/packaging.git' + flow = load 'workflow/installertest.groovy' + } + } + // Run the real tests within docker node label + flow.fetchAndRunJenkinsInstallerTest("docker", rpmfile, susefile, debfile, + packagingBranch, artifactName, jenkinsPort) + } else { + echo "Not running package testing against pull requests" + } +} else { + echo "Skipping package tests" +} + + +// This method sets up the Maven and JDK tools, puts them in the environment along +// with whatever other arbitrary environment variables we passed in, and runs the +// body we passed in within that environment. +void withMavenEnv(List envVars = [], def body) { + // The names here are currently hardcoded for my test environment. This needs + // to be made more flexible. + // Using the "tool" Workflow call automatically installs those tools on the + // node. + String mvntool = tool name: "mvn3.3.3", type: 'hudson.tasks.Maven$MavenInstallation' + String jdktool = tool name: "jdk8_51", type: 'hudson.model.JDK' + + // Set JAVA_HOME, MAVEN_HOME and special PATH variables for the tools we're + // using. + List mvnEnv = ["PATH+MVN=${mvntool}/bin", "PATH+JDK=${jdktool}/bin", "JAVA_HOME=${jdktool}", "MAVEN_HOME=${mvntool}"] + + // Add any additional environment variables. + mvnEnv.addAll(envVars) + + // Invoke the body closure we're passed within the environment we've created. + withEnv(mvnEnv) { + body.call() + } +} + +// Runs the given body within a Timestamper wrapper on the given label. +def timestampedNode(String label, Closure body) { + node(label) { + wrap([$class: 'TimestamperBuildWrapper']) { + body.call() + } + } +} diff --git a/changelog.html b/changelog.html index 910693ef0b..a88d49efae 100644 --- a/changelog.html +++ b/changelog.html @@ -56,10 +56,7 @@ Upcoming changes

What's new in 1.656 (2016/04/03)

diff --git a/cli/pom.xml b/cli/pom.xml index 0413c5811f..05a84a23cb 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main pom - 1.657-SNAPSHOT + 2.0-rc-2-SNAPSHOT cli diff --git a/core/pom.xml b/core/pom.xml index 94ea432187..4f2c0216ff 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main pom - 1.657-SNAPSHOT + 2.0-rc-2-SNAPSHOT jenkins-core @@ -41,7 +41,7 @@ THE SOFTWARE. true 1.239 2.5.6.SEC03 - 1.8.9 + 2.4.6 @@ -243,8 +243,8 @@ THE SOFTWARE. javax.servlet - servlet-api - 2.4 + javax.servlet-api + 3.1.0 provided @@ -411,13 +411,13 @@ THE SOFTWARE. jline jline - 1.0 + 2.12 compile org.fusesource.jansi jansi - 1.9 + 1.11 -Code that monitors the health of slaves +Code that monitors the health of agents \ No newline at end of file diff --git a/core/src/main/java/hudson/os/solaris/ZFSProvisioner.java b/core/src/main/java/hudson/os/solaris/ZFSProvisioner.java index a2ba279f3b..bff594b227 100644 --- a/core/src/main/java/hudson/os/solaris/ZFSProvisioner.java +++ b/core/src/main/java/hudson/os/solaris/ZFSProvisioner.java @@ -59,7 +59,7 @@ public class ZFSProvisioner extends FileSystemProvisioner implements Serializabl ZFSFileSystem fs = libzfs.getFileSystemByMountPoint(f); if(fs!=null) return fs.getName(); - // TODO: for now, only support slaves that are already on ZFS. + // TODO: for now, only support agents that are already on ZFS. throw new IOException("Not on ZFS"); } }); diff --git a/core/src/main/java/hudson/scm/SCM.java b/core/src/main/java/hudson/scm/SCM.java index e7597933d0..ce9d7a6762 100644 --- a/core/src/main/java/hudson/scm/SCM.java +++ b/core/src/main/java/hudson/scm/SCM.java @@ -152,7 +152,7 @@ public abstract class SCM implements Describable, ExtensionPoint { * *

* This flag affects the behavior of Hudson when a job lost its workspace - * (typically due to a slave outage.) If this method returns false and + * (typically due to a agent outage.) If this method returns false and * polling is configured, then that would immediately trigger a new build. * *

@@ -177,9 +177,9 @@ public abstract class SCM implements Describable, ExtensionPoint { * Called before a workspace is deleted on the given node, to provide SCM an opportunity to perform clean up. * *

- * Hudson periodically scans through all the slaves and removes old workspaces that are deemed unnecessary. + * Hudson periodically scans through all the agents and removes old workspaces that are deemed unnecessary. * This behavior is implemented in {@link WorkspaceCleanupThread}, and it is necessary to control the - * disk consumption on slaves. If we don't do this, in a long run, all the slaves will have workspaces + * disk consumption on agents. If we don't do this, in a long run, all the agents will have workspaces * for all the projects, which will be prohibitive in big Hudson. * *

@@ -191,7 +191,7 @@ public abstract class SCM implements Describable, ExtensionPoint { * recursive directory deletion happens. * *

- * Note that this method does not guarantee that such a clean up will happen. For example, slaves can be + * Note that this method does not guarantee that such a clean up will happen. For example, agents can be * taken offline by being physically removed from the network, and in such a case there's no opportunity * to perform this clean up. * @@ -233,7 +233,7 @@ public abstract class SCM implements Describable, ExtensionPoint { * Checks if there has been any changes to this module in the repository. * * TODO: we need to figure out a better way to communicate an error back, - * so that we won't keep retrying the same node (for example a slave might be down.) + * so that we won't keep retrying the same node (for example an agent might be down.) * *

* If the SCM doesn't implement polling, have the {@link #supportsPolling()} method diff --git a/core/src/main/java/hudson/security/FullControlOnceLoggedInAuthorizationStrategy.java b/core/src/main/java/hudson/security/FullControlOnceLoggedInAuthorizationStrategy.java index 8b2239f2f4..bdebc0fca4 100644 --- a/core/src/main/java/hudson/security/FullControlOnceLoggedInAuthorizationStrategy.java +++ b/core/src/main/java/hudson/security/FullControlOnceLoggedInAuthorizationStrategy.java @@ -29,6 +29,7 @@ import jenkins.model.Jenkins; import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.stapler.DataBoundConstructor; +import org.kohsuke.stapler.DataBoundSetter; import javax.inject.Inject; import java.util.Collections; @@ -36,30 +37,52 @@ import java.util.List; /** * {@link AuthorizationStrategy} that grants full-control to authenticated user - * (other than anonymous users.) + * and optionally read access to anonymous users * * @author Kohsuke Kawaguchi */ public class FullControlOnceLoggedInAuthorizationStrategy extends AuthorizationStrategy { + /** + * Whether to allow anonymous read access, for backward compatibility + * default is to allow it + */ + private boolean denyAnonymousReadAccess = false; + @DataBoundConstructor public FullControlOnceLoggedInAuthorizationStrategy() { } @Override public ACL getRootACL() { - return THE_ACL; + return denyAnonymousReadAccess ? AUTHENTICATED_READ : ANONYMOUS_READ; } public List getGroups() { return Collections.emptyList(); } + + /** + * If true, anonymous read access will be allowed + */ + public boolean isAllowAnonymousRead() { + return !denyAnonymousReadAccess; + } + + @DataBoundSetter + public void setAllowAnonymousRead(boolean allowAnonymousRead) { + this.denyAnonymousReadAccess = !allowAnonymousRead; + } - private static final SparseACL THE_ACL = new SparseACL(null); + private static final SparseACL AUTHENTICATED_READ = new SparseACL(null); + private static final SparseACL ANONYMOUS_READ = new SparseACL(null); static { - THE_ACL.add(ACL.EVERYONE, Jenkins.ADMINISTER,true); - THE_ACL.add(ACL.ANONYMOUS, Jenkins.ADMINISTER,false); - THE_ACL.add(ACL.ANONYMOUS,Permission.READ,true); + ANONYMOUS_READ.add(ACL.EVERYONE, Jenkins.ADMINISTER,true); + ANONYMOUS_READ.add(ACL.ANONYMOUS, Jenkins.ADMINISTER,false); + ANONYMOUS_READ.add(ACL.ANONYMOUS, Permission.READ,true); + + AUTHENTICATED_READ.add(ACL.EVERYONE, Jenkins.ADMINISTER, true); + AUTHENTICATED_READ.add(ACL.ANONYMOUS, Jenkins.ADMINISTER, false); } /** diff --git a/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java b/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java index ffaf8311d7..3abe60ee19 100644 --- a/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java +++ b/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java @@ -1,18 +1,18 @@ /* * The MIT License - * + * * Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi, David Calavera, Seiji Sogabe - * + * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -79,7 +79,6 @@ import java.util.Collections; import java.util.List; import java.util.MissingResourceException; import java.util.ResourceBundle; -import java.util.logging.Level; import java.util.logging.Logger; import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.restrictions.NoExternalUse; @@ -97,7 +96,7 @@ public class HudsonPrivateSecurityRealm extends AbstractPasswordBasedSecurityRea /** * If true, sign up is not allowed. *

- * This is a negative switch so that the default value 'false' remains compatible with older installations. + * This is a negative switch so that the default value 'false' remains compatible with older installations. */ private final boolean disableSignup; @@ -260,16 +259,26 @@ public class HudsonPrivateSecurityRealm extends AbstractPasswordBasedSecurityRea } /** - * Creates an user account. Used by admins. + * Creates a user account. Used by admins. * * This version behaves differently from {@link #doCreateAccount(StaplerRequest, StaplerResponse)} in that * this is someone creating another user. */ public void doCreateAccountByAdmin(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { + createAccountByAdmin(req, rsp, "addUser.jelly", "."); // send the user back to the listing page on success + } + + /** + * Creates a user account. Requires {@link Jenkins#ADMINISTER} + */ + @Restricted(NoExternalUse.class) + public User createAccountByAdmin(StaplerRequest req, StaplerResponse rsp, String addUserView, String successView) throws IOException, ServletException { checkPermission(Jenkins.ADMINISTER); - if(createAccount(req, rsp, false, "addUser.jelly")!=null) { - rsp.sendRedirect("."); // send the user back to the listing page + User u = createAccount(req, rsp, false, addUserView); + if(u != null) { + rsp.sendRedirect(successView); } + return u; } /** @@ -334,7 +343,7 @@ public class HudsonPrivateSecurityRealm extends AbstractPasswordBasedSecurityRea if(si.fullname==null || si.fullname.length()==0) si.fullname = si.username; - if(si.email==null || !si.email.contains("@")) + if(isMailerPluginPresent() && (si.email==null || !si.email.contains("@"))) si.errorMessage = Messages.HudsonPrivateSecurityRealm_CreateAccount_InvalidEmailAddress(); if (! User.isIdOrFullnameAllowed(si.username)) { @@ -355,19 +364,30 @@ public class HudsonPrivateSecurityRealm extends AbstractPasswordBasedSecurityRea // register the user User user = createAccount(si.username,si.password1); user.setFullName(si.fullname); - try { - // legacy hack. mail support has moved out to a separate plugin - Class up = Jenkins.getInstance().pluginManager.uberClassLoader.loadClass("hudson.tasks.Mailer$UserProperty"); - Constructor c = up.getDeclaredConstructor(String.class); - user.addProperty((UserProperty)c.newInstance(si.email)); - } catch (RuntimeException e) { - throw e; - } catch (Exception e) { - LOGGER.log(Level.WARNING, "Failed to set the e-mail address",e); + if(isMailerPluginPresent()) { + try { + // legacy hack. mail support has moved out to a separate plugin + Class up = Jenkins.getInstance().pluginManager.uberClassLoader.loadClass("hudson.tasks.Mailer$UserProperty"); + Constructor c = up.getDeclaredConstructor(String.class); + user.addProperty((UserProperty)c.newInstance(si.email)); + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); + } } user.save(); return user; } + + @Restricted(NoExternalUse.class) + public boolean isMailerPluginPresent() { + try { + // mail support has moved to a separate plugin + return null != Jenkins.getInstance().pluginManager.uberClassLoader.loadClass("hudson.tasks.Mailer$UserProperty"); + } catch (ClassNotFoundException e) { + LOGGER.finer("Mailer plugin not present"); + } + return false; + } /** * Creates a new user account by registering a password to the user. diff --git a/core/src/main/java/hudson/security/csrf/CrumbFilter.java b/core/src/main/java/hudson/security/csrf/CrumbFilter.java index 9080a54692..557e96f766 100644 --- a/core/src/main/java/hudson/security/csrf/CrumbFilter.java +++ b/core/src/main/java/hudson/security/csrf/CrumbFilter.java @@ -62,17 +62,11 @@ public class CrumbFilter implements Filter { String crumbFieldName = crumbIssuer.getDescriptor().getCrumbRequestField(); String crumbSalt = crumbIssuer.getDescriptor().getCrumbSalt(); - String crumb = httpRequest.getHeader(crumbFieldName); boolean valid = false; + String crumb = extractCrumbFromRequest(httpRequest, crumbFieldName); if (crumb == null) { - Enumeration paramNames = request.getParameterNames(); - while (paramNames.hasMoreElements()) { - String paramName = (String) paramNames.nextElement(); - if (crumbFieldName.equals(paramName)) { - crumb = request.getParameter(paramName); - break; - } - } + // compatibility for clients that hard-code the default crumb name up to Jenkins 1.TODO + extractCrumbFromRequest(httpRequest, ".crumb"); } if (crumb != null) { if (crumbIssuer.validateCrumb(httpRequest, crumbSalt, crumb)) { @@ -93,6 +87,21 @@ public class CrumbFilter implements Filter { } } + private String extractCrumbFromRequest(HttpServletRequest httpRequest, String crumbFieldName) { + String crumb = httpRequest.getHeader(crumbFieldName); + if (crumb == null) { + Enumeration paramNames = httpRequest.getParameterNames(); + while (paramNames.hasMoreElements()) { + String paramName = (String) paramNames.nextElement(); + if (crumbFieldName.equals(paramName)) { + crumb = httpRequest.getParameter(paramName); + break; + } + } + } + return crumb; + } + protected static boolean isMultipart(HttpServletRequest request) { if (request == null) { return false; diff --git a/core/src/main/java/hudson/security/csrf/CrumbIssuer.java b/core/src/main/java/hudson/security/csrf/CrumbIssuer.java index 6daacd364d..3d80b1a5b6 100644 --- a/core/src/main/java/hudson/security/csrf/CrumbIssuer.java +++ b/core/src/main/java/hudson/security/csrf/CrumbIssuer.java @@ -44,6 +44,9 @@ public abstract class CrumbIssuer implements Describable, Extension private static final String CRUMB_ATTRIBUTE = CrumbIssuer.class.getName() + "_crumb"; + @Restricted(NoExternalUse.class) + public static final String DEFAULT_CRUMB_NAME = "Jenkins-Crumb"; + /** * Get the name of the request parameter the crumb will be stored in. Exposed * here for the remote API. @@ -199,7 +202,7 @@ public abstract class CrumbIssuer implements Describable, Extension } else if ("concat(//crumbRequestField,\":\",//crumb)".equals(xpath)) { // new FullDuplexHttpStream; Main text = ci.getCrumbRequestField() + ':' + ci.getCrumb(); } else if ("concat(//crumbRequestField,'=',//crumb)".equals(xpath)) { // NetBeans - if (ci.getCrumbRequestField().startsWith(".")) { + if (ci.getCrumbRequestField().startsWith(".") || ci.getCrumbRequestField().contains("-")) { text = ci.getCrumbRequestField() + '=' + ci.getCrumb(); } else { text = null; diff --git a/core/src/main/java/hudson/security/csrf/CrumbIssuerDescriptor.java b/core/src/main/java/hudson/security/csrf/CrumbIssuerDescriptor.java index 013405b66a..84d9fb5c16 100644 --- a/core/src/main/java/hudson/security/csrf/CrumbIssuerDescriptor.java +++ b/core/src/main/java/hudson/security/csrf/CrumbIssuerDescriptor.java @@ -64,7 +64,7 @@ public abstract class CrumbIssuerDescriptor extends Descr */ public void setCrumbRequestField(String requestField) { if (Util.fixEmptyAndTrim(requestField) == null) { - crumbRequestField = ".crumb"; + crumbRequestField = CrumbIssuer.DEFAULT_CRUMB_NAME; } else { crumbRequestField = requestField; } diff --git a/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java b/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java index 35447865e8..92d0231e1f 100644 --- a/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java +++ b/core/src/main/java/hudson/security/csrf/DefaultCrumbIssuer.java @@ -124,7 +124,7 @@ public class DefaultCrumbIssuer extends CrumbIssuer { private final static HexStringConfidentialKey CRUMB_SALT = new HexStringConfidentialKey(Jenkins.class,"crumbSalt",16); public DescriptorImpl() { - super(CRUMB_SALT.get(), System.getProperty("hudson.security.csrf.requestfield", ".crumb")); + super(CRUMB_SALT.get(), System.getProperty("hudson.security.csrf.requestfield", CrumbIssuer.DEFAULT_CRUMB_NAME)); load(); } diff --git a/core/src/main/java/hudson/slaves/AbstractCloudComputer.java b/core/src/main/java/hudson/slaves/AbstractCloudComputer.java index 32acc2030a..ee6b32c0ff 100644 --- a/core/src/main/java/hudson/slaves/AbstractCloudComputer.java +++ b/core/src/main/java/hudson/slaves/AbstractCloudComputer.java @@ -50,7 +50,7 @@ public class AbstractCloudComputer extends SlaveCo } /** - * When the slave is deleted, free the node right away. + * When the agent is deleted, free the node right away. */ @Override public HttpResponse doDoDelete() throws IOException { diff --git a/core/src/main/java/hudson/slaves/AbstractCloudSlave.java b/core/src/main/java/hudson/slaves/AbstractCloudSlave.java index cc7967d8ef..93f0f93b0c 100644 --- a/core/src/main/java/hudson/slaves/AbstractCloudSlave.java +++ b/core/src/main/java/hudson/slaves/AbstractCloudSlave.java @@ -55,7 +55,7 @@ public abstract class AbstractCloudSlave extends Slave { public abstract AbstractCloudComputer createComputer(); /** - * Releases and removes this slave. + * Releases and removes this agent. */ public void terminate() throws InterruptedException, IOException { final Computer computer = toComputer(); diff --git a/core/src/main/java/hudson/slaves/ChannelPinger.java b/core/src/main/java/hudson/slaves/ChannelPinger.java index 49ae7c1cf9..b6216f2cf6 100644 --- a/core/src/main/java/hudson/slaves/ChannelPinger.java +++ b/core/src/main/java/hudson/slaves/ChannelPinger.java @@ -74,7 +74,7 @@ public class ChannelPinger extends ComputerListener { public void install(Channel channel) { if (pingInterval < 1) { - LOGGER.fine("Slave ping is disabled"); + LOGGER.fine("Agent ping is disabled"); return; } diff --git a/core/src/main/java/hudson/slaves/Cloud.java b/core/src/main/java/hudson/slaves/Cloud.java index c3e3679474..651ba81f5a 100644 --- a/core/src/main/java/hudson/slaves/Cloud.java +++ b/core/src/main/java/hudson/slaves/Cloud.java @@ -44,23 +44,23 @@ import org.kohsuke.stapler.DataBoundConstructor; import java.util.Collection; /** - * Creates {@link Node}s to dynamically expand/shrink the slaves attached to Hudson. + * Creates {@link Node}s to dynamically expand/shrink the agents attached to Hudson. * *

* Put another way, this class encapsulates different communication protocols - * needed to start a new slave programmatically. + * needed to start a new agent programmatically. * *

Notes for implementers

- *

Automatically delete idle slaves

+ *

Automatically delete idle agents

*

* Nodes provisioned from a cloud do not automatically get released just because it's created from {@link Cloud}. * Doing so requires a use of {@link RetentionStrategy}. Instantiate your {@link Slave} subtype with something * like {@link CloudSlaveRetentionStrategy} so that it gets automatically deleted after some idle time. * - *

Freeing an external resource when a slave is removed

+ *

Freeing an external resource when an agent is removed

*

* Whether you do auto scale-down or not, you often want to release an external resource tied to a cloud-allocated - * slave when it is removed. + * agent when it is removed. * *

* To do this, have your {@link Slave} subtype remember the necessary handle (such as EC2 instance ID) @@ -137,7 +137,7 @@ public abstract class Cloud extends AbstractModelObject implements ExtensionPoin * @param excessWorkload * Number of total executors needed to meet the current demand. * Always >= 1. For example, if this is 3, the implementation - * should launch 3 slaves with 1 executor each, or 1 slave with + * should launch 3 agents with 1 executor each, or 1 agent with * 3 executors, etc. * @return * {@link PlannedNode}s that represent asynchronous {@link Node} diff --git a/core/src/main/java/hudson/slaves/CloudSlaveRetentionStrategy.java b/core/src/main/java/hudson/slaves/CloudSlaveRetentionStrategy.java index ac9a404d47..1948d6b10d 100644 --- a/core/src/main/java/hudson/slaves/CloudSlaveRetentionStrategy.java +++ b/core/src/main/java/hudson/slaves/CloudSlaveRetentionStrategy.java @@ -11,9 +11,9 @@ import java.util.logging.Level; import java.util.logging.Logger; /** - * Default convenience implementation of {@link RetentionStrategy} for slaves provisioned from {@link Cloud}. + * Default convenience implementation of {@link RetentionStrategy} for agents provisioned from {@link Cloud}. * - * If a slave is idle for 10 mins, this retention strategy will remove the slave. This can be used as-is for + * If an agent is idle for 10 mins, this retention strategy will remove the agent. This can be used as-is for * a {@link Node} provisioned by cloud to implement the auto-scaling semantics, it can be subtyped to tweak * the behavior, or it can be used as an example. *

TODO {@link CloudRetentionStrategy} seems to be a better implementation. @@ -64,7 +64,7 @@ public class CloudSlaveRetentionStrategy extends RetentionSt } /** - * If the computer has been idle longer than this time, we'll kill the slave. + * If the computer has been idle longer than this time, we'll kill the agent. */ protected long getIdleMaxTime() { return TIMEOUT; diff --git a/core/src/main/java/hudson/slaves/CommandLauncher.java b/core/src/main/java/hudson/slaves/CommandLauncher.java index 66cfaaf056..fdaaa06441 100644 --- a/core/src/main/java/hudson/slaves/CommandLauncher.java +++ b/core/src/main/java/hudson/slaves/CommandLauncher.java @@ -140,7 +140,7 @@ public class CommandLauncher extends ComputerLauncher { } }); - LOGGER.info("slave agent launched for " + computer.getDisplayName()); + LOGGER.info("agent launched for " + computer.getDisplayName()); } catch (InterruptedException e) { e.printStackTrace(listener.error(Messages.ComputerLauncher_abortedLaunch())); } catch (RuntimeException e) { diff --git a/core/src/main/java/hudson/slaves/ComputerLauncher.java b/core/src/main/java/hudson/slaves/ComputerLauncher.java index 18c44d7b60..cbca34f3ff 100644 --- a/core/src/main/java/hudson/slaves/ComputerLauncher.java +++ b/core/src/main/java/hudson/slaves/ComputerLauncher.java @@ -37,7 +37,7 @@ import org.apache.tools.ant.util.DeweyDecimal; /** * Extension point to allow control over how {@link Computer}s are "launched", - * meaning how they get connected to their slave agent program. + * meaning how they get connected to their agent program. * *

Associated View

*
@@ -54,17 +54,17 @@ import org.apache.tools.ant.util.DeweyDecimal; public abstract class ComputerLauncher extends AbstractDescribableImpl implements ExtensionPoint { /** * Returns true if this {@link ComputerLauncher} supports - * programatic launch of the slave agent in the target {@link Computer}. + * programatic launch of the agent in the target {@link Computer}. */ public boolean isLaunchSupported() { return true; } /** - * Launches the slave agent for the given {@link Computer}. + * Launches the agent for the given {@link Computer}. * *

- * If the slave agent is launched successfully, {@link SlaveComputer#setChannel(InputStream, OutputStream, TaskListener, Channel.Listener)} + * If the agent is launched successfully, {@link SlaveComputer#setChannel(InputStream, OutputStream, TaskListener, Channel.Listener)} * should be invoked in the end to notify Hudson of the established connection. * The operation could also fail, in which case there's no need to make any callback notification, * (except to notify the user of the failure through {@link StreamTaskListener}.) diff --git a/core/src/main/java/hudson/slaves/ComputerListener.java b/core/src/main/java/hudson/slaves/ComputerListener.java index 01c0cfab6e..c2e4dc1f70 100644 --- a/core/src/main/java/hudson/slaves/ComputerListener.java +++ b/core/src/main/java/hudson/slaves/ComputerListener.java @@ -51,7 +51,7 @@ public abstract class ComputerListener implements ExtensionPoint { * *

* This enables you to do some configurable checks to see if we - * want to bring this slave online or if there are considerations + * want to bring this agent online or if there are considerations * that would keep us from doing so. * *

@@ -61,7 +61,7 @@ public abstract class ComputerListener implements ExtensionPoint { * @param c * Computer that's being launched. Never null. * @param taskListener - * Connected to the slave console log. Useful for reporting progress/errors on a lengthy operation. + * Connected to the agent console log. Useful for reporting progress/errors on a lengthy operation. * Never null. * @throws AbortException * Exceptions will be recorded to the listener, and @@ -73,12 +73,12 @@ public abstract class ComputerListener implements ExtensionPoint { } /** - * Called when a slave attempted to connect via {@link ComputerLauncher} but it failed. + * Called when an agent attempted to connect via {@link ComputerLauncher} but it failed. * * @param c * Computer that was trying to launch. Never null. * @param taskListener - * Connected to the slave console log. Useful for reporting progress/errors on a lengthy operation. + * Connected to the agent console log. Useful for reporting progress/errors on a lengthy operation. * Never null. * * @since 1.402 @@ -90,19 +90,19 @@ public abstract class ComputerListener implements ExtensionPoint { * Called before a {@link Computer} is marked online. * *

- * This enables you to do some work on all the slaves + * This enables you to do some work on all the agents * as they get connected. Unlike {@link #onOnline(Computer, TaskListener)}, * a failure to carry out this function normally will prevent * a computer from marked as online. * * @param channel - * This is the channel object to talk to the slave. + * This is the channel object to talk to the agent. * (This is the same object returned by {@link Computer#getChannel()} once * it's connected. * @param root - * The directory where this slave stores files. + * The directory where this agent stores files. * The same as {@link Node#getRootPath()}, except that method returns - * null until the slave is connected. So this parameter is passed explicitly instead. + * null until the agent is connected. So this parameter is passed explicitly instead. * @param listener * This is connected to the launch log of the computer. * Since this method is called synchronously from the thread @@ -136,11 +136,11 @@ public abstract class ComputerListener implements ExtensionPoint { * Called right after a {@link Computer} comes online. * *

- * This enables you to do some work on all the slaves + * This enables you to do some work on all the agents * as they get connected. * *

- * Starting Hudson 1.312, this method is also invoked for the master, not just for slaves. + * Starting Hudson 1.312, this method is also invoked for the master, not just for agents. * * @param listener * This is connected to the launch log of the computer. @@ -199,7 +199,7 @@ public abstract class ComputerListener implements ExtensionPoint { * Called when configuration of the node was changed, a node is added/removed, etc. * *

- * This callback is to signal when there's any change to the list of slaves registered to the system, + * This callback is to signal when there's any change to the list of agents registered to the system, * including addition, removal, changing of the setting, and so on. * * @since 1.377 diff --git a/core/src/main/java/hudson/slaves/ComputerRetentionWork.java b/core/src/main/java/hudson/slaves/ComputerRetentionWork.java index 7dbfb0de96..6a9bff31c1 100644 --- a/core/src/main/java/hudson/slaves/ComputerRetentionWork.java +++ b/core/src/main/java/hudson/slaves/ComputerRetentionWork.java @@ -34,7 +34,7 @@ import hudson.model.PeriodicWork; import hudson.Extension; /** - * Periodically checks the slaves and try to reconnect dead slaves. + * Periodically checks the agents and try to reconnect dead agents. * * @author Kohsuke Kawaguchi * @author Stephen Connolly diff --git a/core/src/main/java/hudson/slaves/ConnectionActivityMonitor.java b/core/src/main/java/hudson/slaves/ConnectionActivityMonitor.java index 41d9aaa431..c9c9071f7b 100644 --- a/core/src/main/java/hudson/slaves/ConnectionActivityMonitor.java +++ b/core/src/main/java/hudson/slaves/ConnectionActivityMonitor.java @@ -37,7 +37,7 @@ import java.io.IOException; import java.util.logging.Logger; /** - * Makes sure that connections to slaves are alive, and if they are not, cut them off. + * Makes sure that connections to agents are alive, and if they are not, cut them off. * *

* If we only rely on TCP retransmission time out for this, the time it takes to detect a bad connection @@ -49,7 +49,7 @@ import java.util.logging.Logger; @Extension public class ConnectionActivityMonitor extends AsyncPeriodicWork { public ConnectionActivityMonitor() { - super("Connection Activity monitoring to slaves"); + super("Connection Activity monitoring to agents"); } protected void execute(TaskListener listener) throws IOException, InterruptedException { @@ -61,7 +61,7 @@ public class ConnectionActivityMonitor extends AsyncPeriodicWork { if (ch instanceof Channel) { Channel channel = (Channel) ch; if (now-channel.getLastHeard() > TIME_TILL_PING) { - // haven't heard from this slave for a while. + // haven't heard from this agent for a while. Long lastPing = (Long)channel.getProperty(ConnectionActivityMonitor.class); if (lastPing!=null && now-lastPing > TIMEOUT) { diff --git a/core/src/main/java/hudson/slaves/EnvironmentVariablesNodeProperty.java b/core/src/main/java/hudson/slaves/EnvironmentVariablesNodeProperty.java index ca6e954feb..e73d44b084 100644 --- a/core/src/main/java/hudson/slaves/EnvironmentVariablesNodeProperty.java +++ b/core/src/main/java/hudson/slaves/EnvironmentVariablesNodeProperty.java @@ -47,7 +47,7 @@ import java.util.List; public class EnvironmentVariablesNodeProperty extends NodeProperty { /** - * Slave-specific environment variables + * Agent-specific environment variables */ private final EnvVars envVars; diff --git a/core/src/main/java/hudson/slaves/JNLPLauncher.java b/core/src/main/java/hudson/slaves/JNLPLauncher.java index b89178a13e..4a43adbbaf 100644 --- a/core/src/main/java/hudson/slaves/JNLPLauncher.java +++ b/core/src/main/java/hudson/slaves/JNLPLauncher.java @@ -37,7 +37,7 @@ import org.kohsuke.stapler.DataBoundConstructor; */ public class JNLPLauncher extends ComputerLauncher { /** - * If the slave needs to tunnel the connection to the master, + * If the agent needs to tunnel the connection to the master, * specify the "host:port" here. This can include the special * syntax "host:" and ":port" to indicate the default host/port * shall be used. diff --git a/core/src/main/java/hudson/slaves/NodeProperty.java b/core/src/main/java/hudson/slaves/NodeProperty.java index b87a57fe88..4a8240d268 100644 --- a/core/src/main/java/hudson/slaves/NodeProperty.java +++ b/core/src/main/java/hudson/slaves/NodeProperty.java @@ -160,7 +160,7 @@ public abstract class NodeProperty implements ReconfigurableDesc * @param env * Manipulate this variable (normally by adding more entries.) * Note that this is an override, so it doesn't contain environment variables that are - * currently set for the slave process itself. + * currently set for the agent process itself. * @param listener * Can be used to send messages. * diff --git a/core/src/main/java/hudson/slaves/NodeProvisioner.java b/core/src/main/java/hudson/slaves/NodeProvisioner.java index 3f5ea3642b..699d9b8cb1 100644 --- a/core/src/main/java/hudson/slaves/NodeProvisioner.java +++ b/core/src/main/java/hudson/slaves/NodeProvisioner.java @@ -228,13 +228,13 @@ public class NodeProvisioner { } catch (InterruptedException e) { throw new AssertionError(e); // since we confirmed that the future is already done } catch (ExecutionException e) { - LOGGER.log(Level.WARNING, "Provisioned slave " + f.displayName + " failed to launch", + LOGGER.log(Level.WARNING, "Provisioned agent " + f.displayName + " failed to launch", e.getCause()); for (CloudProvisioningListener cl : CloudProvisioningListener.all()) { cl.onFailure(f, e.getCause()); } } catch (IOException e) { - LOGGER.log(Level.WARNING, "Provisioned slave " + f.displayName + " failed to launch", + LOGGER.log(Level.WARNING, "Provisioned agent " + f.displayName + " failed to launch", e); for (CloudProvisioningListener cl : CloudProvisioningListener.all()) { cl.onFailure(f, e); @@ -244,7 +244,7 @@ public class NodeProvisioner { throw e; } catch (Throwable e) { LOGGER.log(Level.SEVERE, "Unexpected uncaught exception encountered while " - + "processing provisioned slave " + f.displayName, e); + + "processing provisioned agent " + f.displayName, e); } finally { while (true) { List orig = pendingLaunches.get(); @@ -607,23 +607,23 @@ public class NodeProvisioner { @Override public StrategyDecision apply(@Nonnull StrategyState state) { /* - Here we determine how many additional slaves we need to keep up with the load (if at all), + Here we determine how many additional agents we need to keep up with the load (if at all), which involves a simple math. Broadly speaking, first we check that all the executors are fully utilized before attempting - to start any new slave (this also helps to ignore the temporary gap between different numbers, + to start any new agent (this also helps to ignore the temporary gap between different numbers, as changes in them are not necessarily synchronized --- for example, there's a time lag between - when a slave launches (thus bringing the planned capacity down) and the time when its executors + when an agent launches (thus bringing the planned capacity down) and the time when its executors pick up builds (thus bringing the queue length down.) - Once we confirm that, we compare the # of buildable items against the additional slaves - that are being brought online. If we have more jobs than our executors can handle, we'll launch a new slave. + Once we confirm that, we compare the # of buildable items against the additional agents + that are being brought online. If we have more jobs than our executors can handle, we'll launch a new agent. So this computation involves three stats: 1. # of idle executors 2. # of jobs that are starving for executors - 3. # of additional slaves being provisioned (planned capacities.) + 3. # of additional agents being provisioned (planned capacities.) To ignore a temporary surge/drop, we make conservative estimates on each one of them. That is, we take the current snapshot value, and we take the current exponential moving average (EMA) value, @@ -675,14 +675,14 @@ public class NodeProvisioner { CLOUD: for (Cloud c : Jenkins.getInstance().clouds) { if (excessWorkload < 0) { - break; // enough slaves allocated + break; // enough agents allocated } // Make sure this cloud actually can provision for this label. if (c.canProvision(state.getLabel())) { // provisioning a new node should be conservative --- for example if excessWorkload is 1.4, // we don't want to allocate two nodes but just one. - // OTOH, because of the exponential decay, even when we need one slave, + // OTOH, because of the exponential decay, even when we need one agent, // excess workload is always // something like 0.95, in which case we want to allocate one node. // so the threshold here is 1-MARGIN, and hence floor(excessWorkload+MARGIN) is needed to @@ -774,7 +774,7 @@ public class NodeProvisioner { @Extension public static class NodeProvisionerInvoker extends PeriodicWork { /** - * Give some initial warm up time so that statically connected slaves + * Give some initial warm up time so that statically connected agents * can be brought online before we start allocating more. */ public static int INITIALDELAY = Integer.getInteger(NodeProvisioner.class.getName()+".initialDelay",LoadStatistics.CLOCK*10); diff --git a/core/src/main/java/hudson/slaves/RetentionStrategy.java b/core/src/main/java/hudson/slaves/RetentionStrategy.java index 6fb8f7c8eb..57dfde61af 100644 --- a/core/src/main/java/hudson/slaves/RetentionStrategy.java +++ b/core/src/main/java/hudson/slaves/RetentionStrategy.java @@ -48,7 +48,7 @@ import java.util.logging.Logger; public abstract class RetentionStrategy extends AbstractDescribableImpl> implements ExtensionPoint { /** - * This method will be called periodically to allow this strategy to decide what to do with it's owning slave. + * This method will be called periodically to allow this strategy to decide what to do with it's owning agent. * * @param c {@link Computer} for which this strategy is assigned. This computer may be online or offline. * This object also exposes a bunch of properties that the callee can use to decide what action to take. @@ -59,11 +59,11 @@ public abstract class RetentionStrategy extends AbstractDesc public abstract long check(T c); /** - * This method is called to determine whether manual launching of the slave is allowed at this point in time. + * This method is called to determine whether manual launching of the agent is allowed at this point in time. * @param c {@link Computer} for which this strategy is assigned. This computer may be online or offline. * This object also exposes a bunch of properties that the callee can use to decide if manual launching is * allowed at this time. - * @return {@code true} if manual launching of the slave is allowed at this point in time. + * @return {@code true} if manual launching of the agent is allowed at this point in time. */ public boolean isManualLaunchAllowed(T c) { return true; @@ -85,7 +85,7 @@ public abstract class RetentionStrategy extends AbstractDesc /** * Called when a new {@link Computer} object is introduced (such as when Hudson started, or when - * a new slave is added.) + * a new agent is added.) * *

* The default implementation of this method delegates to {@link #check(Computer)}, @@ -180,12 +180,12 @@ public abstract class RetentionStrategy extends AbstractDesc private static final Logger logger = Logger.getLogger(Demand.class.getName()); /** - * The delay (in minutes) for which the slave must be in demand before tring to launch it. + * The delay (in minutes) for which the agent must be in demand before tring to launch it. */ private final long inDemandDelay; /** - * The delay (in minutes) for which the slave must be idle before taking it offline. + * The delay (in minutes) for which the agent must be idle before taking it offline. */ private final long idleDelay; diff --git a/core/src/main/java/hudson/slaves/SimpleScheduledRetentionStrategy.java b/core/src/main/java/hudson/slaves/SimpleScheduledRetentionStrategy.java index 5a1e804b79..9ab5878d52 100644 --- a/core/src/main/java/hudson/slaves/SimpleScheduledRetentionStrategy.java +++ b/core/src/main/java/hudson/slaves/SimpleScheduledRetentionStrategy.java @@ -45,7 +45,7 @@ import java.util.logging.Logger; import static java.util.logging.Level.INFO; /** - * {@link RetentionStrategy} that controls the slave based on a schedule. + * {@link RetentionStrategy} that controls the agent based on a schedule. * * @author Stephen Connolly * @since 1.275 diff --git a/core/src/main/java/hudson/slaves/SlaveComputer.java b/core/src/main/java/hudson/slaves/SlaveComputer.java index 7e161d9905..ed846e66de 100644 --- a/core/src/main/java/hudson/slaves/SlaveComputer.java +++ b/core/src/main/java/hudson/slaves/SlaveComputer.java @@ -99,7 +99,7 @@ public class SlaveComputer extends Computer { private Boolean isUnix; /** * Effective {@link ComputerLauncher} that hides the details of - * how we launch a slave agent on this computer. + * how we launch a agent agent on this computer. * *

* This is normally the same as {@link Slave#getLauncher()} but @@ -162,7 +162,7 @@ public class SlaveComputer extends Computer { @Override @OverrideMustInvoke(When.ANYTIME) public boolean isAcceptingTasks() { - // our boolean flag is an override on any additional programmatic reasons why this slave might not be + // our boolean flag is an override on any additional programmatic reasons why this agent might not be // accepting tasks. return acceptingTasks && super.isAcceptingTasks(); } @@ -175,13 +175,13 @@ public class SlaveComputer extends Computer { } /** - * Allows suspension of tasks being accepted by the slave computer. While this could be called by a + * Allows suspension of tasks being accepted by the agent computer. While this could be called by a * {@linkplain hudson.slaves.ComputerLauncher} or a {@linkplain hudson.slaves.RetentionStrategy}, such usage * can result in fights between multiple actors calling setting differential values. A better approach * is to override {@link hudson.slaves.RetentionStrategy#isAcceptingTasks(hudson.model.Computer)} if the * {@link hudson.slaves.RetentionStrategy} needs to control availability. * - * @param acceptingTasks {@code true} if the slave can accept tasks. + * @param acceptingTasks {@code true} if the agent can accept tasks. */ public void setAcceptingTasks(boolean acceptingTasks) { this.acceptingTasks = acceptingTasks; @@ -274,7 +274,7 @@ public class SlaveComputer extends Computer { } if (channel==null) - throw new IOException("Slave failed to connect, even though the launcher didn't report it. See the log output for details."); + throw new IOException("Agent failed to connect, even though the launcher didn't report it. See the log output for details."); return null; } }); @@ -350,7 +350,7 @@ public class SlaveComputer extends Computer { } /** - * Creates a {@link Channel} from the given stream and sets that to this slave. + * Creates a {@link Channel} from the given stream and sets that to this agent. * * @param in * Stream connected to the remote "slave.jar". It's the caller's responsibility to do @@ -426,11 +426,11 @@ public class SlaveComputer extends Computer { } /** - * Returns the remote FS root absolute path or {@code null} if the slave is off-line. The absolute path may change + * Returns the remote FS root absolute path or {@code null} if the agent is off-line. The absolute path may change * between connections if the connection method does not provide a consistent working directory and the node's * remote FS is specified as a relative path. * - * @return the remote FS root absolute path or {@code null} if the slave is off-line. + * @return the remote FS root absolute path or {@code null} if the agent is off-line. * @since 1.606 */ @CheckForNull @@ -575,7 +575,7 @@ public class SlaveComputer extends Computer { } finally { SecurityContextHolder.setContext(old); } - log.println("Slave successfully connected and online"); + log.println("Agent successfully connected and online"); Jenkins.getInstance().getQueue().scheduleMaintenance(); } @@ -644,11 +644,11 @@ public class SlaveComputer extends Computer { } /** - * Serves jar files for JNLP slave agents. + * Serves jar files for JNLP agents. * * @deprecated since 2008-08-18. * This URL binding is no longer used and moved up directly under to {@link jenkins.model.Jenkins}, - * but it's left here for now just in case some old JNLP slave agents request it. + * but it's left here for now just in case some old JNLP agents request it. */ @Deprecated public Slave.JnlpJar getJnlpJars(String fileName) { @@ -669,7 +669,7 @@ public class SlaveComputer extends Computer { try { Util.deleteRecursive(getLogDir()); } catch (IOException ex) { - logger.log(Level.WARNING, "Unable to delete slave logs", ex); + logger.log(Level.WARNING, "Unable to delete agent logs", ex); } } @@ -706,7 +706,7 @@ public class SlaveComputer extends Computer { super.setNode(node); launcher = grabLauncher(node); - // maybe the configuration was changed to relaunch the slave, so try to re-launch now. + // maybe the configuration was changed to relaunch the agent, so try to re-launch now. // "constructed==null" test is an ugly hack to avoid launching before the object is fully // constructed. if(constructed!=null) { @@ -740,7 +740,7 @@ public class SlaveComputer extends Computer { } /** - * Get the slave version + * Get the agent version */ public String getSlaveVersion() throws IOException, InterruptedException { return channel.call(new SlaveVersion()); @@ -794,7 +794,7 @@ public class SlaveComputer extends Computer { */ static final class LogHolder { /** - * This field is used on each slave node to record log records on the slave. + * This field is used on each agent to record logs on the agent. */ static final RingBufferLogHandler SLAVE_LOG_HANDLER = new RingBufferLogHandler(); } @@ -827,9 +827,9 @@ public class SlaveComputer extends Computer { /** * Obtains a {@link VirtualChannel} that allows some computation to be performed on the master. - * This method can be called from any thread on the master, or from slave (more precisely, - * it only works from the remoting request-handling thread in slaves, which means if you've started - * separate thread on slaves, that'll fail.) + * This method can be called from any thread on the master, or from agent (more precisely, + * it only works from the remoting request-handling thread in agents, which means if you've started + * separate thread on agents, that'll fail.) * * @return null if the calling thread doesn't have any trace of where its master is. * @since 1.362 @@ -838,7 +838,7 @@ public class SlaveComputer extends Computer { if (Jenkins.getInstanceOrNull()!=null) // check if calling thread is on master or on slave return FilePath.localChannel; - // if this method is called from within the slave computation thread, this should work + // if this method is called from within the agent computation thread, this should work Channel c = Channel.current(); if (c!=null && Boolean.TRUE.equals(c.getProperty("slave"))) return c; diff --git a/core/src/main/java/hudson/slaves/package.html b/core/src/main/java/hudson/slaves/package.html index 9a8c33215d..a5080940f2 100644 --- a/core/src/main/java/hudson/slaves/package.html +++ b/core/src/main/java/hudson/slaves/package.html @@ -23,5 +23,5 @@ THE SOFTWARE. --> -Code related to slaves. +Code related to agents. \ No newline at end of file diff --git a/core/src/main/java/hudson/tools/ToolDescriptor.java b/core/src/main/java/hudson/tools/ToolDescriptor.java index 567c298a0d..641400f454 100644 --- a/core/src/main/java/hudson/tools/ToolDescriptor.java +++ b/core/src/main/java/hudson/tools/ToolDescriptor.java @@ -34,7 +34,10 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Collections; import java.util.List; + +import jenkins.model.GlobalConfigurationCategory; import jenkins.model.Jenkins; +import jenkins.tools.ToolConfigurationCategory; import net.sf.json.JSONObject; import org.jvnet.tiger_types.Types; import org.kohsuke.stapler.QueryParameter; @@ -89,6 +92,12 @@ public abstract class ToolDescriptor extends Descrip return PropertyDescriptor.for_(ToolProperty.all(),clazz); } + + @Override + public GlobalConfigurationCategory getCategory() { + return GlobalConfigurationCategory.get(ToolConfigurationCategory.class); + } + /** * Optional list of installers to be configured by default for new tools of this type. * If there are popular versions of the tool available using generic installation techniques, diff --git a/core/src/main/java/hudson/tools/ToolInstallation.java b/core/src/main/java/hudson/tools/ToolInstallation.java index a14fed1c1b..e6f104dffc 100644 --- a/core/src/main/java/hudson/tools/ToolInstallation.java +++ b/core/src/main/java/hudson/tools/ToolInstallation.java @@ -53,8 +53,8 @@ import jenkins.model.Jenkins; * this class, but choosing this class as a base class has several benefits: * *

    - *
  • Hudson allows admins to specify different locations for tools on some slaves. - * For example, JDK on the master might be on /usr/local/java but on a Windows slave + *
  • Hudson allows admins to specify different locations for tools on some agents. + * For example, JDK on the master might be on /usr/local/java but on a Windows agent * it could be at c:\Program Files\Java *
  • Hudson can verify the existence of tools and provide warnings and diagnostics for * admins. (TBD) diff --git a/core/src/main/java/hudson/tools/ToolInstaller.java b/core/src/main/java/hudson/tools/ToolInstaller.java index 94da3ea494..2aaec73d1d 100644 --- a/core/src/main/java/hudson/tools/ToolInstaller.java +++ b/core/src/main/java/hudson/tools/ToolInstaller.java @@ -97,7 +97,7 @@ public abstract class ToolInstaller implements Describable, Exten * @return the (directory) path at which the tool can be found, * typically coming from {@link #preferredLocation} * @throws IOException if installation fails - * @throws InterruptedException if communication with a slave is interrupted + * @throws InterruptedException if communication with a agent is interrupted */ public abstract FilePath performInstallation(ToolInstallation tool, Node node, TaskListener log) throws IOException, InterruptedException; diff --git a/core/src/main/java/hudson/util/ClockDifference.java b/core/src/main/java/hudson/util/ClockDifference.java index 444d101494..ee56d328d0 100644 --- a/core/src/main/java/hudson/util/ClockDifference.java +++ b/core/src/main/java/hudson/util/ClockDifference.java @@ -41,8 +41,8 @@ public final class ClockDifference { /** * The difference in milliseconds. * - * Positive value means the slave is behind the master, - * negative value means the slave is ahead of the master. + * Positive value means the agent is behind the master, + * negative value means the agent is ahead of the master. */ @Exported public final long diff; diff --git a/core/src/main/java/hudson/util/HttpResponses.java b/core/src/main/java/hudson/util/HttpResponses.java index 16755adc4c..1fb7cf6084 100644 --- a/core/src/main/java/hudson/util/HttpResponses.java +++ b/core/src/main/java/hudson/util/HttpResponses.java @@ -23,10 +23,18 @@ */ package hudson.util; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; import org.kohsuke.stapler.HttpResponse; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; +import javax.annotation.Nonnull; +import javax.servlet.ServletException; import java.io.File; import java.io.IOException; +import java.nio.charset.Charset; +import java.util.Map; /** * Various {@link HttpResponse} implementations. @@ -40,4 +48,126 @@ public class HttpResponses extends org.kohsuke.stapler.HttpResponses { public static HttpResponse staticResource(File f) throws IOException { return staticResource(f.toURI().toURL()); } + + /** + * Create an empty "ok" response. + */ + public static HttpResponse okJSON() { + return new JSONObjectResponse(); + } + + /** + * Create a response containing the supplied "data". + * @param data The data. + */ + public static HttpResponse okJSON(@Nonnull JSONObject data) { + return new JSONObjectResponse(data); + } + + /** + * Create a response containing the supplied "data". + * @param data The data. + */ + public static HttpResponse okJSON(@Nonnull JSONArray data) { + return new JSONObjectResponse(data); + } + + /** + * Create a response containing the supplied "data". + * @param data The data. + */ + public static HttpResponse okJSON(@Nonnull Map data) { + return new JSONObjectResponse(data); + } + + /** + * Set the response as an error response. + * @param message The error "message" set on the response. + * @return {@link this} object. + */ + public static HttpResponse errorJSON(@Nonnull String message) { + return new JSONObjectResponse().error(message); + } + + /** + * {@link net.sf.json.JSONObject} response. + * + * @author tom.fennelly@gmail.com + */ + static class JSONObjectResponse implements HttpResponse { + + private static final Charset UTF8 = Charset.forName("UTF-8"); + + private final JSONObject jsonObject; + + /** + * Create an empty "ok" response. + */ + JSONObjectResponse() { + this.jsonObject = new JSONObject(); + status("ok"); + } + + /** + * Create a response containing the supplied "data". + * @param data The data. + */ + JSONObjectResponse(@Nonnull JSONObject data) { + this(); + this.jsonObject.put("data", data); + } + + /** + * Create a response containing the supplied "data". + * @param data The data. + */ + JSONObjectResponse(@Nonnull JSONArray data) { + this(); + this.jsonObject.put("data", data); + } + + /** + * Create a response containing the supplied "data". + * @param data The data. + */ + JSONObjectResponse(@Nonnull Map data) { + this(); + this.jsonObject.put("data", JSONObject.fromObject(data)); + } + + /** + * Set the response as an error response. + * @param message The error "message" set on the response. + * @return {@link this} object. + */ + @Nonnull JSONObjectResponse error(@Nonnull String message) { + status("error"); + this.jsonObject.put("message", message); + return this; + } + + /** + * Get the JSON response object. + * @return The JSON response object. + */ + @Nonnull JSONObject getJsonObject() { + return jsonObject; + } + + private @Nonnull JSONObjectResponse status(@Nonnull String status) { + this.jsonObject.put("status", status); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException { + byte[] bytes = jsonObject.toString().getBytes(UTF8); + rsp.setContentType("application/json; charset=UTF-8"); + rsp.setContentLength(bytes.length); + rsp.getOutputStream().write(bytes); + } + } } diff --git a/core/src/main/java/hudson/util/ProcessKiller.java b/core/src/main/java/hudson/util/ProcessKiller.java index 1aeb8f7815..a6fd99a542 100644 --- a/core/src/main/java/hudson/util/ProcessKiller.java +++ b/core/src/main/java/hudson/util/ProcessKiller.java @@ -38,7 +38,7 @@ import java.io.Serializable; *

    * Each implementation of {@link ProcessKiller} is instantiated once on the master. * Whenever a process needs to be killed, those implementations are serialized and sent over - * to the appropriate slave, then the {@link #kill(ProcessTree.OSProcess)} method is invoked + * to the appropriate agent, then the {@link #kill(ProcessTree.OSProcess)} method is invoked * to attempt to kill the process. * *

    diff --git a/core/src/main/java/hudson/util/RemotingDiagnostics.java b/core/src/main/java/hudson/util/RemotingDiagnostics.java index 8a2a51aa28..ed3a4c814b 100644 --- a/core/src/main/java/hudson/util/RemotingDiagnostics.java +++ b/core/src/main/java/hudson/util/RemotingDiagnostics.java @@ -61,7 +61,7 @@ import java.util.TreeMap; * Various remoting operations related to diagnostics. * *

    - * These code are useful wherever {@link VirtualChannel} is used, such as master, slaves, Maven JVMs, etc. + * These code are useful wherever {@link VirtualChannel} is used, such as master, agents, Maven JVMs, etc. * * @author Kohsuke Kawaguchi * @since 1.175 diff --git a/core/src/main/java/hudson/util/spring/BeanBuilder.java b/core/src/main/java/hudson/util/spring/BeanBuilder.java index e1d1cba514..38482703fd 100644 --- a/core/src/main/java/hudson/util/spring/BeanBuilder.java +++ b/core/src/main/java/hudson/util/spring/BeanBuilder.java @@ -39,6 +39,7 @@ import org.springframework.web.context.WebApplicationContext; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -132,7 +133,7 @@ public class BeanBuilder extends GroovyObjectSupport { cc.setScriptBaseClass(ClosureScript.class.getName()); GroovyShell shell = new GroovyShell(classLoader,binding,cc); - ClosureScript s = (ClosureScript)shell.parse(script); + ClosureScript s = (ClosureScript)shell.parse(new InputStreamReader(script)); s.setDelegate(this); s.run(); } @@ -336,7 +337,7 @@ public class BeanBuilder extends GroovyObjectSupport { GroovyShell shell = classLoader != null ? new GroovyShell(classLoader,b) : new GroovyShell(b); for (Resource resource : resources) { - shell.evaluate(resource.getInputStream()); + shell.evaluate(new InputStreamReader(resource.getInputStream())); } } diff --git a/core/src/main/java/jenkins/I18n.java b/core/src/main/java/jenkins/I18n.java new file mode 100644 index 0000000000..299b7328e3 --- /dev/null +++ b/core/src/main/java/jenkins/I18n.java @@ -0,0 +1,113 @@ +/* + * The MIT License + * + * Copyright (c) 2015, CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package jenkins; + +import hudson.Extension; +import hudson.model.RootAction; +import hudson.util.HttpResponses; +import jenkins.util.ResourceBundleUtil; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.HttpResponse; +import org.kohsuke.stapler.StaplerRequest; + +import java.util.Locale; + +/** + * Internationalization REST (ish) API. + * @author tom.fennelly@gmail.com + * @since FIXME + */ +@Extension +@Restricted(NoExternalUse.class) +public class I18n implements RootAction { + + /** + * {@inheritDoc} + */ + @Override + public String getIconFileName() { + return null; + } + + /** + * {@inheritDoc} + */ + @Override + public String getDisplayName() { + return null; + } + + /** + * {@inheritDoc} + */ + @Override + public String getUrlName() { + return "i18n"; + } + + /** + * Get a localised resource bundle. + *

    + * URL: {@code i18n/resourceBundle}. + *

    + * Parameters: + *

      + *
    • {@code baseName}: The resource bundle base name.
    • + *
    • {@code language}: {@link Locale} Language. (optional)
    • + *
    • {@code country}: {@link Locale} Country. (optional)
    • + *
    • {@code variant}: {@link Locale} Language variant. (optional)
    • + *
    + * + * @param request The request. + * @return The JSON response. + */ + public HttpResponse doResourceBundle(StaplerRequest request) { + String baseName = request.getParameter("baseName"); + + if (baseName == null) { + return HttpResponses.errorJSON("Mandatory parameter 'baseName' not specified."); + } + + String language = request.getParameter("language"); + String country = request.getParameter("country"); + String variant = request.getParameter("variant"); + + try { + Locale locale = request.getLocale(); + + if (language != null && country != null && variant != null) { + locale = new Locale(language, country, variant); + } else if (language != null && country != null) { + locale = new Locale(language, country); + } else if (language != null) { + locale = new Locale(language); + } + + return HttpResponses.okJSON(ResourceBundleUtil.getBundle(baseName, locale)); + } catch (Exception e) { + return HttpResponses.errorJSON(e.getMessage()); + } + } +} diff --git a/core/src/main/java/jenkins/SlaveToMasterFileCallable.java b/core/src/main/java/jenkins/SlaveToMasterFileCallable.java index f196a88cf3..bda39cff47 100644 --- a/core/src/main/java/jenkins/SlaveToMasterFileCallable.java +++ b/core/src/main/java/jenkins/SlaveToMasterFileCallable.java @@ -5,7 +5,7 @@ import jenkins.security.Roles; import org.jenkinsci.remoting.RoleChecker; /** - * {@link FileCallable}s that can be executed on the master, sent by the slave. + * {@link FileCallable}s that can be executed on the master, sent by the agent. * * @since 1.THU */ diff --git a/core/src/main/java/jenkins/SoloFilePathFilter.java b/core/src/main/java/jenkins/SoloFilePathFilter.java index c2cfa58ef0..9897284582 100644 --- a/core/src/main/java/jenkins/SoloFilePathFilter.java +++ b/core/src/main/java/jenkins/SoloFilePathFilter.java @@ -28,7 +28,7 @@ public final class SoloFilePathFilter extends FilePathFilter { private boolean noFalse(String op, File f, boolean b) { if (!b) - throw new SecurityException("slave may not " + op + " " + f+"\nSee http://jenkins-ci.org/security-144 for more details"); + throw new SecurityException("agent may not " + op + " " + f+"\nSee http://jenkins-ci.org/security-144 for more details"); return true; } diff --git a/core/src/main/java/jenkins/diagnostics/PinningIsBlockingBundledPluginMonitor.java b/core/src/main/java/jenkins/diagnostics/PinningIsBlockingBundledPluginMonitor.java deleted file mode 100644 index 0fb30e10fb..0000000000 --- a/core/src/main/java/jenkins/diagnostics/PinningIsBlockingBundledPluginMonitor.java +++ /dev/null @@ -1,44 +0,0 @@ -package jenkins.diagnostics; - -import com.google.common.collect.ImmutableList; -import hudson.Extension; -import hudson.PluginWrapper; -import hudson.model.AdministrativeMonitor; -import jenkins.model.Jenkins; - -import javax.inject.Inject; -import java.util.ArrayList; -import java.util.List; - -/** - * Fires off when we have any pinned plugins that's blocking upgrade from the bundled version. - * - * @author Kohsuke Kawaguchi - */ -@Extension -public class PinningIsBlockingBundledPluginMonitor extends AdministrativeMonitor { - @Inject - Jenkins jenkins; - - private List offenders; - - @Override - public boolean isActivated() { - return !getOffenders().isEmpty(); - } - - private void compute() { - List offenders = new ArrayList(); - for (PluginWrapper p : jenkins.pluginManager.getPlugins()) { - if (p.isPinningForcingOldVersion()) - offenders.add(p); - } - this.offenders = ImmutableList.copyOf(offenders); - } - - public List getOffenders() { - if (offenders==null) - compute(); - return offenders; - } -} diff --git a/core/src/main/java/jenkins/install/InstallState.java b/core/src/main/java/jenkins/install/InstallState.java new file mode 100644 index 0000000000..42d223815f --- /dev/null +++ b/core/src/main/java/jenkins/install/InstallState.java @@ -0,0 +1,103 @@ +/* + * The MIT License + * + * Copyright (c) 2015, CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package jenkins.install; + +import javax.annotation.CheckForNull; + +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; + +/** + * Jenkins install state. + * + * @author tom.fennelly@gmail.com + */ +@Restricted(NoExternalUse.class) +public enum InstallState { + /** + * Need InstallState != NEW for tests by default + */ + UNKNOWN(true, null), + /** + * The initial set up has been completed + */ + INITIAL_SETUP_COMPLETED(true, null), + /** + * Creating an admin user for an initial Jenkins install. + */ + CREATE_ADMIN_USER(false, INITIAL_SETUP_COMPLETED), + /** + * New Jenkins install. The user has kicked off the process of installing an + * initial set of plugins (via the install wizard). + */ + INITIAL_PLUGINS_INSTALLING(false, CREATE_ADMIN_USER), + /** + * New Jenkins install. + */ + NEW(false, INITIAL_PLUGINS_INSTALLING), + /** + * Restart of an existing Jenkins install. + */ + RESTART(true, INITIAL_SETUP_COMPLETED), + /** + * Upgrade of an existing Jenkins install. + */ + UPGRADE(true, INITIAL_SETUP_COMPLETED), + /** + * Downgrade of an existing Jenkins install. + */ + DOWNGRADE(true, INITIAL_SETUP_COMPLETED), + /** + * Jenkins started in test mode (JenkinsRule). + */ + TEST(true, INITIAL_SETUP_COMPLETED), + /** + * Jenkins started in development mode: Bolean.getBoolean("hudson.Main.development"). + * Can be run normally with the -Djenkins.install.runSetupWizard=true + */ + DEVELOPMENT(true, INITIAL_SETUP_COMPLETED); + + private final boolean isSetupComplete; + private final InstallState nextState; + + private InstallState(boolean isSetupComplete, InstallState nextState) { + this.isSetupComplete = isSetupComplete; + this.nextState = nextState; + } + + /** + * Indicates the initial setup is complete + */ + public boolean isSetupComplete() { + return isSetupComplete; + } + + /** + * Gets the next state + */ + @CheckForNull + public InstallState getNextState() { + return nextState; + } +} diff --git a/core/src/main/java/jenkins/install/InstallUtil.java b/core/src/main/java/jenkins/install/InstallUtil.java new file mode 100644 index 0000000000..0b7a2d84f5 --- /dev/null +++ b/core/src/main/java/jenkins/install/InstallUtil.java @@ -0,0 +1,301 @@ +/* + * The MIT License + * + * Copyright (c) 2015, CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package jenkins.install; + +import static java.util.logging.Level.SEVERE; +import static java.util.logging.Level.WARNING; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Logger; + +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; + +import org.apache.commons.io.FileUtils; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; + +import com.thoughtworks.xstream.XStream; + +import hudson.Functions; +import hudson.model.UpdateCenter.DownloadJob.InstallationStatus; +import hudson.model.UpdateCenter.DownloadJob.Installing; +import hudson.security.AuthorizationStrategy; +import hudson.security.FullControlOnceLoggedInAuthorizationStrategy; +import hudson.security.HudsonPrivateSecurityRealm; +import hudson.security.SecurityRealm; +import hudson.model.UpdateCenter.InstallationJob; +import hudson.model.UpdateCenter.UpdateCenterJob; +import hudson.util.VersionNumber; +import jenkins.model.Jenkins; +import jenkins.util.xml.XMLUtils; + +/** + * Jenkins install utilities. + * + * @author tom.fennelly@gmail.com + */ +@Restricted(NoExternalUse.class) +public class InstallUtil { + + private static final Logger LOGGER = Logger.getLogger(InstallUtil.class.getName()); + + // tests need this to be 1.0 + private static final VersionNumber NEW_INSTALL_VERSION = new VersionNumber("1.0"); + + /** + * Get the current installation state. + * @return The type of "startup" currently under way in Jenkins. + */ + public static InstallState getInstallState() { + // Support a simple state override. Useful for testing. + String stateOverride = System.getenv("jenkins.install.state"); + if (stateOverride != null) { + try { + return InstallState.valueOf(stateOverride.toUpperCase()); + } catch (RuntimeException e) { + throw new IllegalStateException("Unknown install state override specified on the commandline: '" + stateOverride + "'."); + } + } + + // Support a 3-state flag for running or disabling the setup wizard + String shouldRunFlag = System.getProperty("jenkins.install.runSetupWizard"); + boolean shouldRun = "true".equalsIgnoreCase(shouldRunFlag); + boolean shouldNotRun = "false".equalsIgnoreCase(shouldRunFlag); + + // install wizard will always run if environment specified + if (!shouldRun) { + if (Functions.getIsUnitTest()) { + return InstallState.TEST; + } + + if (Boolean.getBoolean("hudson.Main.development")) { + return InstallState.DEVELOPMENT; + } + } + + VersionNumber lastRunVersion = new VersionNumber(getLastExecVersion()); + + // Neither the top level config or the lastExecVersionFile have a version + // stored in them, which means it's a new install. + if (lastRunVersion.compareTo(NEW_INSTALL_VERSION) == 0) { + Jenkins j = Jenkins.getInstance(); + + // Allow for skipping + if(shouldNotRun) { + try { + SetupWizard.completeSetup(j); + UpgradeWizard.completeUpgrade(j); + return j.getInstallState(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + // Edge case: used Jenkins 1 but did not save the system config page, + // the version is not persisted and returns 1.0, so try to check if + // they actually did anything + if (!j.getItemMap().isEmpty() || !mayBeJenkins2SecurityDefaults(j)) { + return InstallState.UPGRADE; + } + return InstallState.NEW; + } + + // We have a last version. + + VersionNumber currentRunVersion = new VersionNumber(getCurrentExecVersion()); + if (lastRunVersion.isOlderThan(currentRunVersion)) { + return InstallState.UPGRADE; + } else if (lastRunVersion.isNewerThan(currentRunVersion)) { + return InstallState.DOWNGRADE; + } else { + // Last running version was the same as "this" running version. + return InstallState.RESTART; + } + } + + /** + * This could be an upgrade, detect a non-default security realm for the stupid case + * where someone installed 1.x and did not save global config or create any items... + */ + private static boolean mayBeJenkins2SecurityDefaults(Jenkins j) { + if(j.getSecurityRealm() == SecurityRealm.NO_AUTHENTICATION) { // called before security set up first + return true; + } + if(j.getSecurityRealm() instanceof HudsonPrivateSecurityRealm) { // might be called after a restart, setup isn't complete + HudsonPrivateSecurityRealm securityRealm = (HudsonPrivateSecurityRealm)j.getSecurityRealm(); + if(securityRealm.getAllUsers().size() == 1 && securityRealm.getUser(SetupWizard.initialSetupAdminUserName) != null) { + AuthorizationStrategy authStrategy = j.getAuthorizationStrategy(); + if(authStrategy instanceof FullControlOnceLoggedInAuthorizationStrategy) { + // must have been using 2.0+ to set this, as it wasn't present in 1.x and the default is true, to _allow_ anon read + if(!((FullControlOnceLoggedInAuthorizationStrategy)authStrategy).isAllowAnonymousRead()) { + return true; + } + } + } + } + return false; + } + + /** + * Save the current Jenkins instance version as the last executed version. + *

    + * This state information is required in order to determine whether or not the Jenkins instance + * is just restarting, or is being upgraded from an earlier version. + */ + public static void saveLastExecVersion() { + if (Jenkins.VERSION.equals(Jenkins.UNCOMPUTED_VERSION)) { + // This should never happen!! Only adding this check in case someone moves the call to this method to the wrong place. + throw new IllegalStateException("Unexpected call to InstallUtil.saveLastExecVersion(). Jenkins.VERSION has not been initialized. Call computeVersion() first."); + } + saveLastExecVersion(Jenkins.VERSION); + } + + /** + * Get the last saved Jenkins instance version. + * @return The last saved Jenkins instance version. + * @see #saveLastExecVersion() + */ + public static @Nonnull String getLastExecVersion() { + File lastExecVersionFile = getLastExecVersionFile(); + if (lastExecVersionFile.exists()) { + try { + return FileUtils.readFileToString(lastExecVersionFile); + } catch (IOException e) { + LOGGER.log(SEVERE, "Unexpected Error. Unable to read " + lastExecVersionFile.getAbsolutePath(), e); + LOGGER.log(WARNING, "Unable to determine the last running version (see error above). Treating this as a restart. No plugins will be updated."); + return getCurrentExecVersion(); + } + } else { + // Backward compatibility. Use the last version stored in the top level config.xml. + // Going to read the value directly from the config.xml file Vs hoping that the + // Jenkins startup sequence has moved far enough along that it has loaded the + // global config. It can't load the global config until well into the startup + // sequence because the unmarshal requires numerous objects to be created e.g. + // it requires the Plugin Manager. It happens too late and it's too risky to + // change how it currently works. + File configFile = getConfigFile(); + if (configFile.exists()) { + try { + String lastVersion = XMLUtils.getValue("/hudson/version", configFile); + if (lastVersion.length() > 0) { + return lastVersion; + } + } catch (Exception e) { + LOGGER.log(SEVERE, "Unexpected error reading global config.xml", e); + } + } + return NEW_INSTALL_VERSION.toString(); + } + } + + /** + * Save a specific version as the last execute version. + * @param version The version to save. + */ + static void saveLastExecVersion(@Nonnull String version) { + File lastExecVersionFile = getLastExecVersionFile(); + try { + FileUtils.write(lastExecVersionFile, version); + } catch (IOException e) { + LOGGER.log(SEVERE, "Failed to save " + lastExecVersionFile.getAbsolutePath(), e); + } + } + + static File getConfigFile() { + return new File(Jenkins.getInstance().getRootDir(), "config.xml"); + } + + static File getLastExecVersionFile() { + return new File(Jenkins.getInstance().getRootDir(), "jenkins.install.InstallUtil.lastExecVersion"); + } + + static File getInstallingPluginsFile() { + return new File(Jenkins.getInstance().getRootDir(), "jenkins.install.InstallUtil.installingPlugins"); + } + + private static String getCurrentExecVersion() { + if (Jenkins.VERSION.equals(Jenkins.UNCOMPUTED_VERSION)) { + // This should never happen!! Only adding this check in case someone moves the call to this method to the wrong place. + throw new IllegalStateException("Unexpected call to InstallUtil.getCurrentExecVersion(). Jenkins.VERSION has not been initialized. Call computeVersion() first."); + } + return Jenkins.VERSION; + } + + /** + * Returns a list of any plugins that are persisted in the installing list + */ + @SuppressWarnings("unchecked") + public static synchronized @CheckForNull Map getPersistedInstallStatus() { + File installingPluginsFile = getInstallingPluginsFile(); + if(installingPluginsFile == null || !installingPluginsFile.exists()) { + return null; + } + return (Map)new XStream().fromXML(installingPluginsFile); + } + + /** + * Persists a list of installing plugins; this is used in the case Jenkins fails mid-installation and needs to be restarted + * @param installingPlugins + */ + public static synchronized void persistInstallStatus(List installingPlugins) { + File installingPluginsFile = getInstallingPluginsFile(); + if(installingPlugins == null || installingPlugins.isEmpty()) { + installingPluginsFile.delete(); + return; + } + LOGGER.fine("Writing install state to: " + installingPluginsFile.getAbsolutePath()); + Map statuses = new HashMap(); + for(UpdateCenterJob j : installingPlugins) { + if(j instanceof InstallationJob && j.getCorrelationId() != null) { // only include install jobs with a correlation id (directly selected) + InstallationJob ij = (InstallationJob)j; + InstallationStatus status = ij.status; + String statusText = status.getType(); + if(status instanceof Installing) { // flag currently installing plugins as pending + statusText = "Pending"; + } + statuses.put(ij.plugin.name, statusText); + } + } + try { + String installingPluginXml = new XStream().toXML(statuses); + FileUtils.write(installingPluginsFile, installingPluginXml); + } catch (IOException e) { + LOGGER.log(SEVERE, "Failed to save " + installingPluginsFile.getAbsolutePath(), e); + } + } + + /** + * Call to remove any active install status + */ + public static void clearInstallStatus() { + persistInstallStatus(null); + } +} diff --git a/core/src/main/java/jenkins/install/SetupWizard.java b/core/src/main/java/jenkins/install/SetupWizard.java new file mode 100644 index 0000000000..b2faacbeb4 --- /dev/null +++ b/core/src/main/java/jenkins/install/SetupWizard.java @@ -0,0 +1,248 @@ +package jenkins.install; + +import java.io.IOException; +import java.util.Locale; +import java.util.UUID; +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + +import org.acegisecurity.Authentication; +import org.acegisecurity.context.SecurityContextHolder; +import org.acegisecurity.providers.UsernamePasswordAuthenticationToken; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.HttpResponse; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; + +import hudson.BulkChange; +import hudson.FilePath; +import hudson.model.UpdateCenter; +import hudson.model.User; +import hudson.security.FullControlOnceLoggedInAuthorizationStrategy; +import hudson.security.HudsonPrivateSecurityRealm; +import hudson.security.SecurityRealm; +import hudson.security.csrf.DefaultCrumbIssuer; +import hudson.util.HttpResponses; +import hudson.util.PluginServletFilter; +import hudson.util.VersionNumber; +import jenkins.model.Jenkins; +import jenkins.security.s2m.AdminWhitelistRule; + +/** + * A Jenkins instance used during first-run to provide a limited set of services while + * initial installation is in progress + * + * @since 2.0 + */ +@Restricted(NoExternalUse.class) +public class SetupWizard { + /** + * The security token parameter name + */ + public static String initialSetupAdminUserName = "admin"; + + private final Logger LOGGER = Logger.getLogger(SetupWizard.class.getName()); + + private final Jenkins jenkins; + + public SetupWizard(Jenkins j) throws IOException, InterruptedException { + this.jenkins = j; + + UpgradeWizard.completeUpgrade(j); + + // Create an admin user by default with a + // difficult password + FilePath iapf = getInitialAdminPasswordFile(); + if(j.getSecurityRealm() == null || j.getSecurityRealm() == SecurityRealm.NO_AUTHENTICATION) { // this seems very fragile + BulkChange bc = new BulkChange(j); + try{ + HudsonPrivateSecurityRealm securityRealm = new HudsonPrivateSecurityRealm(false, false, null); + j.setSecurityRealm(securityRealm); + String randomUUID = UUID.randomUUID().toString().replace("-", "").toLowerCase(Locale.ENGLISH); + + // create an admin user + securityRealm.createAccount(SetupWizard.initialSetupAdminUserName, randomUUID); + + // JENKINS-33599 - write to a file in the jenkins home directory + // most native packages of Jenkins creates a machine user account 'jenkins' to run Jenkins, + // and use group 'jenkins' for admins. So we allo groups to read this file + iapf.touch(System.currentTimeMillis()); + iapf.chmod(0640); + iapf.write(randomUUID + System.lineSeparator(), "UTF-8"); + + + // Lock Jenkins down: + FullControlOnceLoggedInAuthorizationStrategy authStrategy = new FullControlOnceLoggedInAuthorizationStrategy(); + authStrategy.setAllowAnonymousRead(false); + j.setAuthorizationStrategy(authStrategy); + + // Shut down all the ports we can by default: + j.setSlaveAgentPort(-1); // -1 to disable + + // require a crumb issuer + j.setCrumbIssuer(new DefaultCrumbIssuer(false)); + + // set master -> slave security: + j.getInjector().getInstance(AdminWhitelistRule.class) + .setMasterKillSwitch(false); + + j.save(); // !! + bc.commit(); + } finally { + bc.abort(); + } + } + + if(iapf.exists()) { + String setupKey = iapf.readToString().trim(); + String ls = System.lineSeparator(); + LOGGER.info(ls + ls + "*************************************************************" + ls + + "*************************************************************" + ls + + "*************************************************************" + ls + + ls + + "Jenkins initial setup is required. An admin user has been created and " + + "a password generated." + ls + + "Please use the following password to proceed to installation:" + ls + + ls + + setupKey + ls + + ls + + "This may also be found at: " + iapf.getRemote() + ls + + ls + + "*************************************************************" + ls + + "*************************************************************" + ls + + "*************************************************************" + ls); + } + + try { + PluginServletFilter.addFilter(FORCE_SETUP_WIZARD_FILTER); + } catch (ServletException e) { + throw new AssertionError(e); + } + + try { + // Make sure plugin metadata is up to date + UpdateCenter.updateDefaultSite(); + } catch (Exception e) { + LOGGER.log(Level.WARNING, e.getMessage(), e); + } + } + + /** + * Indicates a generated password should be used - e.g. this is a new install, no security realm set up + */ + public boolean useGeneratedPassword() { + try { + return getInitialAdminPasswordFile().exists(); + } catch (Exception e) { + // ignore + } + return false; + } + + /** + * Called during the initial setup to create an admin user + */ + public void doCreateAdminUser(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { + Jenkins j = Jenkins.getInstance(); + j.checkPermission(Jenkins.ADMINISTER); + + // This will be set up by default. if not, something changed, ok to fail + HudsonPrivateSecurityRealm securityRealm = (HudsonPrivateSecurityRealm)j.getSecurityRealm(); + + User admin = securityRealm.getUser(SetupWizard.initialSetupAdminUserName); + try { + if(admin != null) { + admin.delete(); // assume the new user may well be 'admin' + } + + User u = securityRealm.createAccountByAdmin(req, rsp, "/jenkins/install/SetupWizard/setupWizardFirstUser.jelly", req.getContextPath() + "/"); + if (u != null) { + if(admin != null) { + admin = null; + } + + // Success! Delete the temporary password file: + try { + getInitialAdminPasswordFile().delete(); + } catch (InterruptedException e) { + throw new IOException(e); + } + + j.setInstallState(InstallState.CREATE_ADMIN_USER.getNextState()); + + // ... and then login + Authentication a = new UsernamePasswordAuthenticationToken(u.getId(),req.getParameter("password1")); + a = securityRealm.getSecurityComponents().manager.authenticate(a); + SecurityContextHolder.getContext().setAuthentication(a); + } + } finally { + if(admin != null) { + admin.save(); // recreate this initial user if something failed + } + } + } + + /** + * Gets the file used to store the initial admin password + */ + public FilePath getInitialAdminPasswordFile() { + return jenkins.getRootPath().child("secrets/initialAdminPassword"); + } + + /** + * Remove the setupWizard filter, ensure all updates are written to disk, etc + */ + public HttpResponse doCompleteInstall() throws IOException, ServletException { + completeSetup(jenkins); + PluginServletFilter.removeFilter(FORCE_SETUP_WIZARD_FILTER); + return HttpResponses.okJSON(); + } + + static void completeSetup(Jenkins jenkins) { + jenkins.setInstallState(InstallState.INITIAL_SETUP_COMPLETED); + InstallUtil.saveLastExecVersion(); + // Also, clean up the setup wizard if it's completed + jenkins.setSetupWizard(null); + } + + /** + * This filter will validate that the security token is provided + */ + private final Filter FORCE_SETUP_WIZARD_FILTER = new Filter() { + @Override + public void init(FilterConfig cfg) throws ServletException { + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + // Force root requests to the setup wizard + if (request instanceof HttpServletRequest) { + HttpServletRequest req = (HttpServletRequest)request; + if((req.getContextPath() + "/").equals(req.getRequestURI())) { + chain.doFilter(new HttpServletRequestWrapper(req) { + public String getRequestURI() { + return getContextPath() + "/setupWizard/"; + } + }, response); + return; + } + // fall through to handling the request normally + } + chain.doFilter(request, response); + } + + @Override + public void destroy() { + } + }; +} diff --git a/core/src/main/java/jenkins/install/UpgradeWizard.java b/core/src/main/java/jenkins/install/UpgradeWizard.java new file mode 100644 index 0000000000..b2f47b3b04 --- /dev/null +++ b/core/src/main/java/jenkins/install/UpgradeWizard.java @@ -0,0 +1,160 @@ +package jenkins.install; + +import hudson.Extension; +import hudson.model.PageDecorator; +import hudson.model.UpdateSite.Plugin; +import hudson.util.HttpResponses; +import hudson.util.VersionNumber; +import jenkins.model.Jenkins; +import org.apache.commons.io.FileUtils; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.HttpResponse; +import org.kohsuke.stapler.WebApp; +import org.kohsuke.stapler.interceptor.RequirePOST; + +import javax.inject.Inject; +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; +import java.util.logging.Logger; + +import static java.util.logging.Level.*; +import static org.apache.commons.io.FileUtils.*; +import static org.apache.commons.lang.StringUtils.*; + +/** + * This is a stop-gap measure until JENKINS-33663 comes in. + * This call may go away. Please don't use it from outside. + * + * @author Kohsuke Kawaguchi + */ +@Restricted(NoExternalUse.class) +@Extension +public class UpgradeWizard extends PageDecorator { + @Inject + private Jenkins jenkins; + + /** + * Is this instance fully upgraded? + */ + private volatile boolean upToDate; + + /** + * File that captures the state of upgrade. + * + * This file records the vesrion number that the installation has upgraded to. + */ + /*package*/ File getStateFile() { + return new File(Jenkins.getInstance().getRootDir(),"jenkins.install.UpgradeWizard.state"); + } + + public UpgradeWizard() throws IOException { + updateUpToDate(); + } + + private void updateUpToDate() throws IOException { + upToDate = new VersionNumber("2.0").compareTo(getCurrentLevel()) <= 0; + } + + /** + * What is the version the upgrade wizard has run the last time and upgraded to? + */ + private VersionNumber getCurrentLevel() throws IOException { + VersionNumber from = new VersionNumber("1.0"); + File state = getStateFile(); + if (state.exists()) { + from = new VersionNumber(defaultIfBlank(readFileToString(state), "1.0").trim()); + } + return from; + } + + /*package*/ + void setCurrentLevel(VersionNumber v) throws IOException { + FileUtils.writeStringToFile(getStateFile(), v.toString()); + updateUpToDate(); + } + + static void completeUpgrade(Jenkins jenkins) throws IOException { + // this was determined to be a new install, don't run the update wizard here + UpgradeWizard uw = jenkins.getInjector().getInstance(UpgradeWizard.class); + if (uw!=null) + uw.setCurrentLevel(new VersionNumber("2.0")); + } + + /** + * Do we need to show the upgrade wizard prompt? + */ + public boolean isDue() { + if (upToDate) + return false; + + // only admin users should see this + if (!jenkins.hasPermission(Jenkins.ADMINISTER)) + return false; + + // only show when Jenkins is fully up & running + WebApp wa = WebApp.getCurrent(); + if (wa==null || !(wa.getApp() instanceof Jenkins)) + return false; + + return System.currentTimeMillis() > getStateFile().lastModified(); + } + + /** + * Snooze the upgrade wizard notice. + */ + @RequirePOST + public HttpResponse doSnooze() throws IOException { + jenkins.checkPermission(Jenkins.ADMINISTER); + File f = getStateFile(); + FileUtils.touch(f); + f.setLastModified(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1)); + LOGGER.log(FINE, "Snoozed the upgrade wizard notice"); + return HttpResponses.redirectToContextRoot(); + } + + /** + * Performs the upgrade activity. + */ + @RequirePOST + public HttpResponse doUpgrade() throws IOException { + jenkins.checkPermission(Jenkins.ADMINISTER); + try { + if (new VersionNumber("2.0").compareTo(getCurrentLevel())>0) { + // 1.0 -> 2.0 upgrade + LOGGER.log(WARNING, "Performing 1.0 to 2.0 upgrade"); + + for (String shortName : Arrays.asList("workflow-aggregator", "pipeline-stage-view", "github-organization-folder")) { + Plugin p = jenkins.getUpdateCenter().getPlugin(shortName); + if (p==null) { + LOGGER.warning("Plugin not found in the update center: " + shortName); + } else { + p.deploy(true); + } + } + + // upgrade to 2.0 complete (if plugin installations fail, that's too bad) + FileUtils.writeStringToFile(getStateFile(),"2.0"); + + // send the user to the update center so that people can see the installation & restart if need be. + return HttpResponses.redirectViaContextPath("updateCenter/"); + } + +// in the future... +// if (new VersionNumber("3.0").compareTo(getCurrentLevel())>0) { +// +// } + + return NOOP; + } finally { + updateUpToDate(); + } + } + + /*package*/ static final HttpResponse NOOP = HttpResponses.redirectToContextRoot(); + + + private static final Logger LOGGER = Logger.getLogger(UpgradeWizard.class.getName()); +} diff --git a/core/src/main/java/jenkins/management/ConfigureLink.java b/core/src/main/java/jenkins/management/ConfigureLink.java index bc7ab1bc16..b7e25ff7e0 100644 --- a/core/src/main/java/jenkins/management/ConfigureLink.java +++ b/core/src/main/java/jenkins/management/ConfigureLink.java @@ -35,7 +35,7 @@ public class ConfigureLink extends ManagementLink { @Override public String getIconFileName() { - return "setting.png"; + return "gear2.png"; } public String getDisplayName() { diff --git a/core/src/main/java/jenkins/model/ArtifactManagerFactory.java b/core/src/main/java/jenkins/model/ArtifactManagerFactory.java index f0d08c4e05..efff30c565 100644 --- a/core/src/main/java/jenkins/model/ArtifactManagerFactory.java +++ b/core/src/main/java/jenkins/model/ArtifactManagerFactory.java @@ -45,7 +45,7 @@ public abstract class ArtifactManagerFactory extends AbstractDescribableImpl build); diff --git a/core/src/main/java/jenkins/model/AssetManager.java b/core/src/main/java/jenkins/model/AssetManager.java new file mode 100644 index 0000000000..d886ab70fd --- /dev/null +++ b/core/src/main/java/jenkins/model/AssetManager.java @@ -0,0 +1,112 @@ +package jenkins.model; + +import hudson.Extension; +import hudson.model.UnprotectedRootAction; +import hudson.util.TimeUnit2; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.URL; +import java.util.Enumeration; + +/** + * Serves files located in the {@code /assets} classpath directory via the Jenkins core ClassLoader. + * e.g. the URL {@code /assets/jquery-detached/jsmodules/jquery2.js} will load {@code jquery-detached/jsmodules/jquery2.js} + * resource from the classpath below {@code /assets}. + * + * @author Kohsuke Kawaguchi + */ +@Extension +public class AssetManager implements UnprotectedRootAction { + + // not shown in the UI + @Override + public String getIconFileName() { + return null; + } + + @Override + public String getDisplayName() { + return null; + } + + @Override + public String getUrlName() { + return "assets"; + } + + /** + * Exposes assets in the core classloader over HTTP. + */ + public void doDynamic(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { + String path = req.getRestOfPath(); + URL resource = findResource(path); + + if (resource == null) { + rsp.setStatus(HttpServletResponse.SC_NOT_FOUND); + return; + } + + // Stapler routes requests like the "/static/.../foo/bar/zot" to be treated like "/foo/bar/zot" + // and this is used to serve long expiration header, by using Jenkins.VERSION_HASH as "..." + // to create unique URLs. Recognize that and set a long expiration header. + String requestPath = req.getRequestURI().substring(req.getContextPath().length()); + boolean staticLink = requestPath.startsWith("/static/"); + long expires = staticLink ? TimeUnit2.DAYS.toMillis(365) : -1; + + // use serveLocalizedFile to support automatic locale selection + rsp.serveLocalizedFile(req, resource, expires); + } + + /** + * Locates the asset from the classloader. + * + *

    + * To allow plugins to bring its own assets without worrying about colliding with the assets in core, + * look for child classloader first. But to support plugins that get split, if the child classloader + * doesn't find it, fall back to the parent classloader. + */ + private URL findResource(String path) throws IOException { + try { + if (path.contains("..")) // crude avoidance of directory traversal attack + throw new IllegalArgumentException(path); + + String name; + if (path.charAt(0) == '/') { + name = "assets" + path; + } else { + name = "assets/" + path; + } + + ClassLoader cl = Jenkins.class.getClassLoader(); + URL url = (URL) $findResource.invoke(cl, name); + if (url==null) { + // pick the last one, which is the one closest to the leaf of the classloader tree. + Enumeration e = cl.getResources(name); + while (e.hasMoreElements()) { + url = e.nextElement(); + } + } + return url; + } catch (InvocationTargetException|IllegalAccessException e) { + throw new Error(e); + } + } + + private static final Method $findResource = init(); + + private static Method init() { + try { + Method m = ClassLoader.class.getDeclaredMethod("findResource", String.class); + m.setAccessible(true); + return m; + } catch (NoSuchMethodException e) { + throw (Error)new NoSuchMethodError().initCause(e); + } + } +} diff --git a/core/src/main/java/jenkins/model/GlobalConfiguration.java b/core/src/main/java/jenkins/model/GlobalConfiguration.java index 15cc69f831..31c8e08ff3 100644 --- a/core/src/main/java/jenkins/model/GlobalConfiguration.java +++ b/core/src/main/java/jenkins/model/GlobalConfiguration.java @@ -42,15 +42,6 @@ public abstract class GlobalConfiguration extends Descriptor scmListeners = new CopyOnWriteList(); /** - * TCP slave agent port. + * TCP agent port. * 0 for random, -1 to disable. */ private int slaveAgentPort = Integer.getInteger(Jenkins.class.getName()+".slaveAgentPort",0); @@ -603,7 +617,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve public transient final OverallLoadStatistics overallLoad = new OverallLoadStatistics(); /** - * Load statistics of the free roaming jobs and slaves. + * Load statistics of the free roaming jobs and agents. * * This includes all executors on {@link hudson.model.Node.Mode#NORMAL} nodes and jobs that do not have any assigned nodes. * @@ -623,7 +637,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve * Use {@link #unlabeledNodeProvisioner}. * This was broken because it was tracking all the executors in the system, but it was only tracking * free-roaming jobs in the queue. So {@link Cloud} fails to launch nodes when you have some exclusive - * slaves and free-roaming jobs in the queue. + * agents and free-roaming jobs in the queue. */ @Restricted(NoExternalUse.class) @Deprecated @@ -786,7 +800,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve JenkinsJVMAccess._setJenkinsJVM(true); // set it for unit tests as they will not have gone through WebAppMain long start = System.currentTimeMillis(); - // As Jenkins is starting, grant this process full control + // As Jenkins is starting, grant this process full control ACL.impersonate(ACL.SYSTEM); try { this.root = root; @@ -797,7 +811,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve theInstance = this; if (!new File(root,"jobs").exists()) { - // if this is a fresh install, use more modern default layout that's consistent with slaves + // if this is a fresh install, use more modern default layout that's consistent with agents workspaceDir = "${JENKINS_HOME}/workspace/${ITEM_FULLNAME}"; } @@ -856,6 +870,16 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve if(KILL_AFTER_LOAD) System.exit(0); + installState = InstallUtil.getInstallState(); + if (installState == InstallState.RESTART || installState == InstallState.DOWNGRADE) { + InstallUtil.saveLastExecVersion(); + } + + if(!installState.isSetupComplete()) { + // Start immediately with the setup wizard for new installs + setupWizard = new SetupWizard(this); + } + launchTcpSlaveAgentListener(); if (UDPBroadcastThread.PORT != -1) { @@ -930,6 +954,33 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve } return this; } + + /** + * Get the Jenkins {@link jenkins.install.InstallState install state}. + * @return The Jenkins {@link jenkins.install.InstallState install state}. + */ + @Nonnull + @Restricted(NoExternalUse.class) + public InstallState getInstallState() { + return installState; + } + + /** + * Update the current install state. + */ + @Restricted(NoExternalUse.class) + public void setInstallState(@Nonnull InstallState newState) { + installState = newState; + } + + /** + * Get the URL path to the Install Wizard JavaScript. + * @return The URL path to the Install Wizard JavaScript. + */ + @Restricted(NoExternalUse.class) + public String getInstallWizardPath() { + return servletContext.getInitParameter("install-wizard-path"); + } /** * Executes a reactor. @@ -1026,10 +1077,10 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve } } } catch (BindException e) { - LOGGER.log(Level.WARNING, String.format("Failed to listen to incoming slave connections through JNLP port %s. Change the JNLP port number", slaveAgentPort), e); + LOGGER.log(Level.WARNING, String.format("Failed to listen to incoming agent connections through JNLP port %s. Change the JNLP port number", slaveAgentPort), e); new AdministrativeError(administrativeMonitorId, - "Failed to listen to incoming slave connections through JNLP", - "Failed to listen to incoming slave connections through JNLP. Change the JNLP port number to solve the problem.", e); + "Failed to listen to incoming agent connections through JNLP", + "Failed to listen to incoming agent connections through JNLP. Change the JNLP port number to solve the problem.", e); } } } @@ -1439,10 +1490,10 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve */ @Exported(name="jobs") public List getItems() { - if (authorizationStrategy instanceof AuthorizationStrategy.Unsecured || - authorizationStrategy instanceof FullControlOnceLoggedInAuthorizationStrategy) { - return new ArrayList(items.values()); - } + if (authorizationStrategy instanceof AuthorizationStrategy.Unsecured || + authorizationStrategy instanceof FullControlOnceLoggedInAuthorizationStrategy) { + return new ArrayList(items.values()); + } List viewableItems = new ArrayList(); for (TopLevelItem item : items.values()) { @@ -1749,7 +1800,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve /** - * Gets the slave node of the give name, hooked under this Jenkins. + * Gets the agent node of the give name, hooked under this Jenkins. */ public @CheckForNull Node getNode(String name) { return nodes.getNode(name); @@ -1817,11 +1868,11 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve } public DescribableList, NodePropertyDescriptor> getNodeProperties() { - return nodeProperties; + return nodeProperties; } public DescribableList, NodePropertyDescriptor> getGlobalNodeProperties() { - return globalNodeProperties; + return globalNodeProperties; } /** @@ -2430,7 +2481,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve */ @Override public TopLevelItem getItem(String name) throws AccessDeniedException { if (name==null) return null; - TopLevelItem item = items.get(name); + TopLevelItem item = items.get(name); if (item==null) return null; if (!item.hasPermission(Item.READ)) { @@ -2711,6 +2762,19 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve return new Hudson.MasterComputer(); } + private void loadConfig() throws IOException { + XmlFile cfg = getConfigFile(); + if (cfg.exists()) { + // reset some data that may not exist in the disk file + // so that we can take a proper compensation action later. + primaryView = null; + views.clear(); + + // load from disk + cfg.unmarshal(Jenkins.this); + } + } + private synchronized TaskBuilder loadTasks() throws IOException { File projectsDir = new File(root,"jobs"); if(!projectsDir.getCanonicalFile().isDirectory() && !projectsDir.mkdirs()) { @@ -2725,17 +2789,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve TaskGraphBuilder g = new TaskGraphBuilder(); Handle loadJenkins = g.requires(EXTENSIONS_AUGMENTED).attains(JOB_LOADED).add("Loading global config", new Executable() { public void run(Reactor session) throws Exception { - XmlFile cfg = getConfigFile(); - if (cfg.exists()) { - // reset some data that may not exist in the disk file - // so that we can take a proper compensation action later. - primaryView = null; - views.clear(); - - // load from disk - cfg.unmarshal(Jenkins.this); - } - + loadConfig(); // if we are loading old data that doesn't have this field if (slaves != null && !slaves.isEmpty() && nodes.isLegacy()) { nodes.setNodes(slaves); @@ -2783,7 +2837,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve {// recompute label objects - populates the labels mapping. for (Node slave : nodes.getNodes()) - // Note that not all labels are visible until the slaves have connected. + // Note that not all labels are visible until the agents have connected. slave.getAssignedLabels(); getAssignedLabels(); } @@ -3305,8 +3359,6 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve systemMessage = Util.nullify(req.getParameter("system_message")); - setJDKs(req.bindJSONToList(JDK.class, json.get("jdks"))); - boolean result = true; for (Descriptor d : Functions.getSortedDescriptorsForGlobalConfigUnclassified()) result &= configureDescriptor(req,json,d); @@ -3422,10 +3474,10 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve } public HttpResponse doToggleCollapse() throws ServletException, IOException { - final StaplerRequest request = Stapler.getCurrentRequest(); - final String paneId = request.getParameter("paneId"); + final StaplerRequest request = Stapler.getCurrentRequest(); + final String paneId = request.getParameter("paneId"); - PaneStatusProperties.forCurrentUser().toggleCollapsed(paneId); + PaneStatusProperties.forCurrentUser().toggleCollapsed(paneId); return HttpResponses.forwardToPreviousPage(); } @@ -3438,10 +3490,10 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve } /** - * Obtains the thread dump of all slaves (including the master.) + * Obtains the thread dump of all agents (including the master.) * *

    - * Since this is for diagnostics, it has a built-in precautionary measure against hang slaves. + * Since this is for diagnostics, it has a built-in precautionary measure against hang agents. */ public Map> getAllThreadDumps() throws IOException, InterruptedException { checkPermission(ADMINISTER); @@ -3456,9 +3508,9 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve LOGGER.info("Failed to get thread dump for node " + c.getName() + ": " + e.getMessage()); } } - if (toComputer() == null) { - future.put("master", RemotingDiagnostics.getThreadDumpAsync(FilePath.localChannel)); - } + if (toComputer() == null) { + future.put("master", RemotingDiagnostics.getThreadDumpAsync(FilePath.localChannel)); + } // if the result isn't available in 5 sec, ignore that. // this is a precaution against hang nodes @@ -3534,20 +3586,6 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve // looks good } - /** - * Makes sure that the given name is good as a job name. - * @return trimmed name if valid; throws Failure if not - */ - private String checkJobName(String name) throws Failure { - checkGoodName(name); - name = name.trim(); - projectNamingStrategy.checkName(name); - if(getItem(name)!=null) - throw new Failure(Messages.Hudson_JobAlreadyExists(name)); - // looks good - return name; - } - private static String toPrintableName(String name) { StringBuilder printableName = new StringBuilder(); for( int i=0; i getManagementLinks() { return ManagementLink.all(); } + + /** + * If set, a currently active setup wizard - e.g. installation + */ + public SetupWizard getSetupWizard() { + return setupWizard; + } + + /** + * Sets the setup wizard + */ + public void setSetupWizard(SetupWizard setupWizard) { + this.setupWizard = setupWizard; + } /** * Exposes the current user to /me URL. @@ -4544,14 +4577,14 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve IOUtils.closeQuietly(is); } String ver = props.getProperty("version"); - if(ver==null) ver="?"; + if(ver==null) ver = UNCOMPUTED_VERSION; VERSION = ver; context.setAttribute("version",ver); VERSION_HASH = Util.getDigestOf(ver).substring(0, 8); SESSION_HASH = Util.getDigestOf(ver+System.currentTimeMillis()).substring(0, 8); - if(ver.equals("?") || Boolean.getBoolean("hudson.script.noCache")) + if(ver.equals(UNCOMPUTED_VERSION) || Boolean.getBoolean("hudson.script.noCache")) RESOURCE_PATH = ""; else RESOURCE_PATH = "/static/"+SESSION_HASH; @@ -4559,24 +4592,55 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve VIEW_RESOURCE_PATH = "/resources/"+ SESSION_HASH; } + /** + * The version number before it is "computed" (by a call to computeVersion()). + * @since FIXME + */ + public static final String UNCOMPUTED_VERSION = "?"; + /** * Version number of this Jenkins. */ - public static String VERSION="?"; + public static String VERSION = UNCOMPUTED_VERSION; /** * Parses {@link #VERSION} into {@link VersionNumber}, or null if it's not parseable as a version number * (such as when Jenkins is run with "mvn hudson-dev:run") */ - public static VersionNumber getVersion() { + public @CheckForNull static VersionNumber getVersion() { + return toVersion(VERSION); + } + + /** + * Get the stored version of Jenkins, as stored by + * {@link #doConfigSubmit(org.kohsuke.stapler.StaplerRequest, org.kohsuke.stapler.StaplerResponse)}. + *

    + * Parses the version into {@link VersionNumber}, or null if it's not parseable as a version number + * (such as when Jenkins is run with "mvn hudson-dev:run") + * @since FIXME + */ + public @CheckForNull static VersionNumber getStoredVersion() { + return toVersion(Jenkins.getActiveInstance().version); + } + + /** + * Parses a version string into {@link VersionNumber}, or null if it's not parseable as a version number + * (such as when Jenkins is run with "mvn hudson-dev:run") + */ + private static @CheckForNull VersionNumber toVersion(@CheckForNull String versionString) { + if (versionString == null) { + return null; + } + try { - return new VersionNumber(VERSION); + return new VersionNumber(versionString); } catch (NumberFormatException e) { try { // for non-released version of Jenkins, this looks like "1.345 (private-foobar), so try to approximate. - int idx = VERSION.indexOf(' '); - if (idx>0) - return new VersionNumber(VERSION.substring(0,idx)); + int idx = versionString.indexOf(' '); + if (idx > 0) { + return new VersionNumber(versionString.substring(0,idx)); + } } catch (NumberFormatException _) { // fall through } @@ -4647,7 +4711,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve private static final String WORKSPACE_DIRNAME = Configuration.getStringConfigParameter("workspaceDirName", "workspace"); /** - * Automatically try to launch a slave when Jenkins is initialized or a new slave is created. + * Automatically try to launch an agent when Jenkins is initialized or a new agent computer is created. */ public static boolean AUTOMATIC_SLAVE_LAUNCH = true; @@ -4706,7 +4770,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve assert PERMISSIONS != null; assert ADMINISTER != null; } catch (RuntimeException e) { - // when loaded on a slave and this fails, subsequent NoClassDefFoundError will fail to chain the cause. + // when loaded on an agent and this fails, subsequent NoClassDefFoundError will fail to chain the cause. // see http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8051847 // As we don't know where the first exception will go, let's also send this to logging so that // we have a known place to look at. diff --git a/core/src/main/java/jenkins/model/item_category/Categories.java b/core/src/main/java/jenkins/model/item_category/Categories.java new file mode 100644 index 0000000000..9df7b230aa --- /dev/null +++ b/core/src/main/java/jenkins/model/item_category/Categories.java @@ -0,0 +1,79 @@ +/* + * The MIT License + * + * Copyright (c) 2016 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.model.item_category; + +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.HttpResponse; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; +import org.kohsuke.stapler.export.Exported; +import org.kohsuke.stapler.export.ExportedBean; +import org.kohsuke.stapler.export.Flavor; + +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; +import javax.servlet.ServletException; +import java.io.IOException; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * It is a logic representation of a set of {@link Category}. + * + * This class is not thread-safe. + */ +@ExportedBean +@Restricted(NoExternalUse.class) +public class Categories implements HttpResponse, Serializable { + + private List items; + + public Categories() { + items = new ArrayList(); + } + + @Exported(name = "categories") + public List getItems() { + return items; + } + + @Override + public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException { + rsp.serveExposedBean(req, this, Flavor.JSON); + } + + @CheckForNull + public Category getItem(@Nonnull String id) { + for (Category category : items) { + if (category.getId().equals(id)) { + return category; + } + } + return null; + } + +} diff --git a/core/src/main/java/jenkins/model/item_category/Category.java b/core/src/main/java/jenkins/model/item_category/Category.java new file mode 100644 index 0000000000..391d7ab8e3 --- /dev/null +++ b/core/src/main/java/jenkins/model/item_category/Category.java @@ -0,0 +1,97 @@ +/* + * The MIT License + * + * Copyright 2016 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.model.item_category; + +import hudson.model.TopLevelItem; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.export.Exported; +import org.kohsuke.stapler.export.ExportedBean; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * Represents an {@link ItemCategory} and its {@link TopLevelItem}s. + * + * This class is not thread-safe. + */ +@ExportedBean +@Restricted(NoExternalUse.class) +public class Category implements Serializable { + + private String id; + + private String name; + + private String description; + + private int order; + + private int minToShow; + + private List> items; + + public Category(String id, String name, String description, int order, int minToShow, List> items) { + this.id= id; + this.name = name; + this.description = description; + this.order = order; + this.minToShow = minToShow; + this.items = items; + } + + @Exported + public String getId() { + return id; + } + + @Exported + public String getName() { + return name; + } + + @Exported + public String getDescription() { + return description; + } + + @Exported + public int getOrder() { + return order; + } + + @Exported + public int getMinToShow() { + return minToShow; + } + + @Exported + public List> getItems() { + return items; + } + +} diff --git a/core/src/main/java/jenkins/model/item_category/ItemCategory.java b/core/src/main/java/jenkins/model/item_category/ItemCategory.java new file mode 100644 index 0000000000..7078a86377 --- /dev/null +++ b/core/src/main/java/jenkins/model/item_category/ItemCategory.java @@ -0,0 +1,133 @@ +/* + * The MIT License + * + * Copyright (c) 2016 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.model.item_category; + +import hudson.Extension; +import hudson.ExtensionList; +import hudson.ExtensionPoint; +import hudson.model.TopLevelItemDescriptor; + +import javax.annotation.Nonnull; + +/** + * A category for {@link hudson.model.Item}s. + * + * @since 2.0 + */ +public abstract class ItemCategory implements ExtensionPoint { + + public static int MIN_TOSHOW = 1; + + /** + * Helpful to set the order. + */ + private int order = 1; + + /** + * Identifier, e.g. "standaloneprojects", etc. + * + * @return the identifier + */ + public abstract String getId(); + + /** + * The description in plain text + * + * @return the description + */ + public abstract String getDescription(); + + /** + * A human readable name. + * + * @return the display name + */ + public abstract String getDisplayName(); + + /** + * Minimum number of items required to show the category. + * + * @return the minimum items required + */ + public abstract int getMinToShow(); + + private void setOrder(int order) { + this.order = order; + } + + public int getOrder() { + return order; + } + + /** + * A {@link ItemCategory} associated to this {@link TopLevelItemDescriptor}. + * + * @return A {@link ItemCategory}, if not found, {@link ItemCategory.UncategorizedCategory} is returned + */ + @Nonnull + public static ItemCategory getCategory(TopLevelItemDescriptor descriptor) { + int order = 0; + ExtensionList categories = ExtensionList.lookup(ItemCategory.class); + for (ItemCategory category : categories) { + if (category.getId().equals(descriptor.getCategoryId())) { + category.setOrder(++order); + return category; + } + order++; + } + return new UncategorizedCategory(); + } + + /** + * The default {@link ItemCategory}, if an item doesn't belong anywhere else, this is where it goes by default. + */ + @Extension(ordinal = Integer.MIN_VALUE) + public static final class UncategorizedCategory extends ItemCategory { + + public static final String ID = "uncategorized"; + + @Override + public String getId() { + return ID; + } + + @Override + public String getDescription() { + return Messages.Uncategorized_Description(); + } + + @Override + public String getDisplayName() { + return Messages.Uncategorized_DisplayName(); + } + + @Override + public int getMinToShow() { + return ItemCategory.MIN_TOSHOW; + } + + } + +} diff --git a/core/src/main/java/jenkins/model/item_category/NestedProjectsCategory.java b/core/src/main/java/jenkins/model/item_category/NestedProjectsCategory.java new file mode 100644 index 0000000000..b4501d01e4 --- /dev/null +++ b/core/src/main/java/jenkins/model/item_category/NestedProjectsCategory.java @@ -0,0 +1,67 @@ +/* + * The MIT License + * + * Copyright (c) 2016 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.model.item_category; + +import hudson.Extension; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.DoNotUse; + +/** + * Designed for project hierarchies with folders. + * + * This category should be moved to cloudbees-folder-plugin short-term. + * Really when upgrades its baseline to 2.0. + * + * @since 2.0 + */ +@Restricted(DoNotUse.class) +@Extension(ordinal = -100) +public class NestedProjectsCategory extends ItemCategory { + + /** + * TODO Make public when be moved to cloudbees-folder-plugin. + */ + private static final String ID = "nested-projects"; + + @Override + public String getId() { + return ID; + } + + @Override + public String getDescription() { + return Messages.NestedProjects_Description(); + } + + @Override + public String getDisplayName() { + return Messages.NestedProjects_DisplayName(); + } + + @Override + public int getMinToShow() { + return ItemCategory.MIN_TOSHOW; + } +} diff --git a/core/src/main/java/jenkins/model/item_category/StandaloneProjectsCategory.java b/core/src/main/java/jenkins/model/item_category/StandaloneProjectsCategory.java new file mode 100644 index 0000000000..d1e5479bff --- /dev/null +++ b/core/src/main/java/jenkins/model/item_category/StandaloneProjectsCategory.java @@ -0,0 +1,56 @@ +/* + * The MIT License + * + * Copyright (c) 2016 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.model.item_category; + +import hudson.Extension; + +/** + * Designed for projects with a self-contained configuration and history. + */ +@Extension(ordinal = -100) +public class StandaloneProjectsCategory extends ItemCategory { + + public static final String ID = "standalone-projects"; + + @Override + public String getId() { + return ID; + } + + @Override + public String getDescription() { + return Messages.StandaloneProjects_Description(); + } + + @Override + public String getDisplayName() { + return Messages.StandaloneProjects_DisplayName(); + } + + @Override + public int getMinToShow() { + return ItemCategory.MIN_TOSHOW; + } +} diff --git a/core/src/main/java/jenkins/mvn/GlobalMavenConfig.java b/core/src/main/java/jenkins/mvn/GlobalMavenConfig.java index 67ace424e8..f1959125a2 100644 --- a/core/src/main/java/jenkins/mvn/GlobalMavenConfig.java +++ b/core/src/main/java/jenkins/mvn/GlobalMavenConfig.java @@ -2,6 +2,8 @@ package jenkins.mvn; import hudson.Extension; import jenkins.model.GlobalConfiguration; +import jenkins.model.GlobalConfigurationCategory; +import jenkins.tools.ToolConfigurationCategory; import net.sf.json.JSONObject; import org.kohsuke.stapler.StaplerRequest; @@ -16,6 +18,11 @@ public class GlobalMavenConfig extends GlobalConfiguration { load(); } + @Override + public ToolConfigurationCategory getCategory() { + return GlobalConfigurationCategory.get(ToolConfigurationCategory.class); + } + @Override public boolean configure(StaplerRequest req, JSONObject json) throws FormException { req.bindJSON(this, json); diff --git a/core/src/main/java/jenkins/security/ChannelConfigurator.java b/core/src/main/java/jenkins/security/ChannelConfigurator.java index a371ae5401..fd7c26e229 100644 --- a/core/src/main/java/jenkins/security/ChannelConfigurator.java +++ b/core/src/main/java/jenkins/security/ChannelConfigurator.java @@ -30,7 +30,7 @@ public abstract class ChannelConfigurator implements ExtensionPoint { * *

    *
    {@link SlaveComputer} - *
    When a channel is being established to talk to a slave. + *
    When a channel is being established to talk to a agent. *
    */ public void onChannelBuilding(ChannelBuilder builder, @Nullable Object context) {} diff --git a/core/src/main/java/jenkins/security/MasterToSlaveCallable.java b/core/src/main/java/jenkins/security/MasterToSlaveCallable.java index 29837e973a..e348ec1e49 100644 --- a/core/src/main/java/jenkins/security/MasterToSlaveCallable.java +++ b/core/src/main/java/jenkins/security/MasterToSlaveCallable.java @@ -5,7 +5,7 @@ import org.jenkinsci.remoting.RoleChecker; /** - * Convenient {@link Callable} meant to be run on slave. + * Convenient {@link Callable} meant to be run on agent. * * @author Kohsuke Kawaguchi * @since 1.THU diff --git a/core/src/main/java/jenkins/security/Roles.java b/core/src/main/java/jenkins/security/Roles.java index cca26873a5..ada2ca96c0 100644 --- a/core/src/main/java/jenkins/security/Roles.java +++ b/core/src/main/java/jenkins/security/Roles.java @@ -7,7 +7,7 @@ import org.jenkinsci.remoting.Role; * *

    * In Jenkins, there is really only one interesting role, which is the Jenkins master. - * Slaves, CLI, and Maven processes are all going to load classes from the master, + * Agents, CLI, and Maven processes are all going to load classes from the master, * which means it accepts anything that the master asks for, and thus they need * not have any role. * @@ -16,14 +16,14 @@ import org.jenkinsci.remoting.Role; */ public class Roles { /** - * Indicates that a callable runs on masters, requested by slaves/CLI/maven/whatever. + * Indicates that a callable runs on masters, requested by agents/CLI/maven/whatever. */ public static final Role MASTER = new Role("master"); /** - * Indicates that a callable is meant to run on slaves. + * Indicates that a callable is meant to run on agents. * - * This isn't used to reject callables to run on the slave, but rather to allow + * This isn't used to reject callables to run on the agent, but rather to allow * the master to promptly reject callables that are really not meant to be run on * the master (as opposed to ones that do not have that information, which gets * {@link Role#UNKNOWN}) diff --git a/core/src/main/java/jenkins/security/SlaveToMasterCallable.java b/core/src/main/java/jenkins/security/SlaveToMasterCallable.java index 2a3a35a42b..34b227c5bf 100644 --- a/core/src/main/java/jenkins/security/SlaveToMasterCallable.java +++ b/core/src/main/java/jenkins/security/SlaveToMasterCallable.java @@ -5,7 +5,7 @@ import org.jenkinsci.remoting.RoleChecker; /** - * Convenient {@link Callable} that are meant to run on the master (sent by slave/CLI/etc). + * Convenient {@link Callable} that are meant to run on the master (sent by agent/CLI/etc). * * @author Kohsuke Kawaguchi * @since 1.THU diff --git a/core/src/main/java/jenkins/security/s2m/AdminCallableMonitor.java b/core/src/main/java/jenkins/security/s2m/AdminCallableMonitor.java index d6a483af76..c93a8d0055 100644 --- a/core/src/main/java/jenkins/security/s2m/AdminCallableMonitor.java +++ b/core/src/main/java/jenkins/security/s2m/AdminCallableMonitor.java @@ -38,7 +38,7 @@ public class AdminCallableMonitor extends AdministrativeMonitor { @Override public String getDisplayName() { - return "Slave \u2192 Master Access Control"; + return "Agent \u2192 Master Access Control"; } // bind this to URL diff --git a/core/src/main/java/jenkins/security/s2m/CallableDirectionChecker.java b/core/src/main/java/jenkins/security/s2m/CallableDirectionChecker.java index 706d17c0be..9042f19c3c 100644 --- a/core/src/main/java/jenkins/security/s2m/CallableDirectionChecker.java +++ b/core/src/main/java/jenkins/security/s2m/CallableDirectionChecker.java @@ -55,11 +55,11 @@ public class CallableDirectionChecker extends RoleChecker { if (isWhitelisted(subject,expected)) { // this subject is dubious, but we are letting it through as per whitelisting - LOGGER.log(Level.FINE, "Explicitly allowing {0} to be sent from slave to master", name); + LOGGER.log(Level.FINE, "Explicitly allowing {0} to be sent from agent to master", name); return; } - throw new SecurityException("Sending " + name + " from slave to master is prohibited.\nSee http://jenkins-ci.org/security-144 for more details"); + throw new SecurityException("Sending " + name + " from agent to master is prohibited.\nSee http://jenkins-ci.org/security-144 for more details"); } /** diff --git a/core/src/main/java/jenkins/security/s2m/DefaultFilePathFilter.java b/core/src/main/java/jenkins/security/s2m/DefaultFilePathFilter.java index 563d19269e..1cc0944737 100644 --- a/core/src/main/java/jenkins/security/s2m/DefaultFilePathFilter.java +++ b/core/src/main/java/jenkins/security/s2m/DefaultFilePathFilter.java @@ -36,7 +36,7 @@ import java.util.logging.Level; import java.util.logging.Logger; /** - * Blocks slaves from writing to files on the master by default (and also provide the kill switch.) + * Blocks agents from writing to files on the master by default (and also provide the kill switch.) */ @Restricted(DoNotUse.class) // impl @Extension public class DefaultFilePathFilter extends ChannelConfigurator { @@ -53,7 +53,7 @@ import java.util.logging.Logger; new ReflectiveFilePathFilter() { protected boolean op(String op, File f) throws SecurityException { if (BYPASS) { - LOGGER.log(Level.FINE, "slave allowed to {0} {1}", new Object[] {op, f}); + LOGGER.log(Level.FINE, "agent allowed to {0} {1}", new Object[] {op, f}); return true; } else { return false; diff --git a/core/src/main/java/jenkins/security/s2m/package-info.java b/core/src/main/java/jenkins/security/s2m/package-info.java index 84875777f6..b0650138bc 100644 --- a/core/src/main/java/jenkins/security/s2m/package-info.java +++ b/core/src/main/java/jenkins/security/s2m/package-info.java @@ -1,4 +1,4 @@ /** - * Slave -> master security. + * Agent -> master security. */ package jenkins.security.s2m; diff --git a/core/src/main/java/jenkins/slaves/DefaultJnlpSlaveReceiver.java b/core/src/main/java/jenkins/slaves/DefaultJnlpSlaveReceiver.java index 3de0ab274a..f82ad9ca18 100644 --- a/core/src/main/java/jenkins/slaves/DefaultJnlpSlaveReceiver.java +++ b/core/src/main/java/jenkins/slaves/DefaultJnlpSlaveReceiver.java @@ -19,7 +19,7 @@ import java.util.logging.Level; import java.util.logging.Logger; /** - * Match the name against the slave name and route the incoming JNLP agent as {@link Slave}. + * Match the name against the agent name and route the incoming JNLP agent as {@link Slave}. * * @author Kohsuke Kawaguchi * @since 1.561 @@ -54,7 +54,7 @@ public class DefaultJnlpSlaveReceiver extends JnlpAgentReceiver { } if (!matchesSecret(nodeName,handshake)) { - handshake.error(nodeName + " can't be connected since the slave's secret does not match the handshake secret."); + handshake.error(nodeName + " can't be connected since the agent's secret does not match the handshake secret."); return true; } @@ -74,7 +74,7 @@ public class DefaultJnlpSlaveReceiver extends JnlpAgentReceiver { } /** - * Called after the client has connected to check if the slave secret matches the handshake secret + * Called after the client has connected to check if the agent secret matches the handshake secret * * @param nodeName * Name of the incoming JNLP agent. All {@link JnlpAgentReceiver} shares a single namespace @@ -84,12 +84,12 @@ public class DefaultJnlpSlaveReceiver extends JnlpAgentReceiver { * Encapsulation of the interaction with the incoming JNLP agent. * * @return - * true if the slave secret matches the handshake secret, false otherwise. + * true if the agent secret matches the handshake secret, false otherwise. */ private boolean matchesSecret(String nodeName, JnlpServerHandshake handshake){ SlaveComputer computer = (SlaveComputer) Jenkins.getInstance().getComputer(nodeName); String handshakeSecret = handshake.getRequestProperty("Secret-Key"); - // Verify that the slave secret matches the handshake secret. + // Verify that the agent secret matches the handshake secret. if (!computer.getJnlpMac().equals(handshakeSecret)) { LOGGER.log(Level.WARNING, "An attempt was made to connect as {0} from {1} with an incorrect secret", new Object[]{nodeName, handshake.getSocket()!=null?handshake.getSocket().getRemoteSocketAddress():null}); return false; diff --git a/core/src/main/java/jenkins/slaves/EncryptedSlaveAgentJnlpFile.java b/core/src/main/java/jenkins/slaves/EncryptedSlaveAgentJnlpFile.java index dfdd5de750..feb11427a8 100644 --- a/core/src/main/java/jenkins/slaves/EncryptedSlaveAgentJnlpFile.java +++ b/core/src/main/java/jenkins/slaves/EncryptedSlaveAgentJnlpFile.java @@ -44,7 +44,7 @@ public class EncryptedSlaveAgentJnlpFile implements HttpResponse { */ private final String viewName; /** - * Name of the slave, which is used to determine secret HMAC code. + * Name of the agent, which is used to determine secret HMAC code. */ private final String slaveName; /** diff --git a/core/src/main/java/jenkins/slaves/JnlpAgentReceiver.java b/core/src/main/java/jenkins/slaves/JnlpAgentReceiver.java index 3a382fd6c4..7865c88526 100644 --- a/core/src/main/java/jenkins/slaves/JnlpAgentReceiver.java +++ b/core/src/main/java/jenkins/slaves/JnlpAgentReceiver.java @@ -10,7 +10,7 @@ import java.io.IOException; import java.util.Properties; /** - * Receives incoming slaves connecting through {@link JnlpSlaveAgentProtocol2}. + * Receives incoming agents connecting through {@link JnlpSlaveAgentProtocol2}. * *

    * This is useful to establish the communication with other JVMs and use them diff --git a/core/src/main/java/jenkins/slaves/JnlpSlaveAgentProtocol.java b/core/src/main/java/jenkins/slaves/JnlpSlaveAgentProtocol.java index 6dc34ffd10..6ba274c8aa 100644 --- a/core/src/main/java/jenkins/slaves/JnlpSlaveAgentProtocol.java +++ b/core/src/main/java/jenkins/slaves/JnlpSlaveAgentProtocol.java @@ -27,26 +27,26 @@ import java.util.logging.Level; import java.util.logging.Logger; /** - * {@link AgentProtocol} that accepts connection from slave agents. + * {@link AgentProtocol} that accepts connection from agents. * *

    Security

    *

    - * Once connected, remote slave agents can send in commands to be + * Once connected, remote agents can send in commands to be * executed on the master, so in a way this is like an rsh service. * Therefore, it is important that we reject connections from - * unauthorized remote slaves. + * unauthorized remote agents. * *

    - * We do this by computing HMAC of the slave name. - * This code is sent to the slave inside the .jnlp file + * We do this by computing HMAC of the agent name. + * This code is sent to the agent inside the .jnlp file * (this file itself is protected by HTTP form-based authentication that - * we use everywhere else in Jenkins), and the slave sends this + * we use everywhere else in Jenkins), and the agent sends this * token back when it connects to the master. - * Unauthorized slaves can't access the protected .jnlp file, - * so it can't impersonate a valid slave. + * Unauthorized agents can't access the protected .jnlp file, + * so it can't impersonate a valid agent. * *

    - * We don't want to force the JNLP slave agents to be restarted + * We don't want to force the JNLP agents to be restarted * whenever the server restarts, so right now this secret master key * is generated once and used forever, which makes this whole scheme * less secure. @@ -96,7 +96,7 @@ public class JnlpSlaveAgentProtocol extends AgentProtocol { SlaveComputer computer = (SlaveComputer) Jenkins.getInstance().getComputer(nodeName); if(computer==null) { - error("No such slave: "+nodeName); + error("No such agent: "+nodeName); return; } @@ -139,10 +139,10 @@ public class JnlpSlaveAgentProtocol extends AgentProtocol { return computer.getChannel(); } catch (AbortException e) { logw.println(e.getMessage()); - logw.println("Failed to establish the connection with the slave"); + logw.println("Failed to establish the connection with the agent"); throw e; } catch (IOException e) { - logw.println("Failed to establish the connection with the slave " + nodeName); + logw.println("Failed to establish the connection with the agent " + nodeName); e.printStackTrace(logw); throw e; } @@ -152,7 +152,7 @@ public class JnlpSlaveAgentProtocol extends AgentProtocol { private static final Logger LOGGER = Logger.getLogger(JnlpSlaveAgentProtocol.class.getName()); /** - * This secret value is used as a seed for slaves. + * This secret value is used as a seed for agents. */ public static final HMACConfidentialKey SLAVE_SECRET = new HMACConfidentialKey(JnlpSlaveAgentProtocol.class,"secret"); } diff --git a/core/src/main/java/jenkins/slaves/JnlpSlaveAgentProtocol2.java b/core/src/main/java/jenkins/slaves/JnlpSlaveAgentProtocol2.java index 2b7e4e719e..23baaf31b6 100644 --- a/core/src/main/java/jenkins/slaves/JnlpSlaveAgentProtocol2.java +++ b/core/src/main/java/jenkins/slaves/JnlpSlaveAgentProtocol2.java @@ -13,7 +13,7 @@ import java.net.Socket; * *

    * This protocol extends the version 1 protocol by adding a per-client cookie, - * so that we can detect a reconnection from the slave and take appropriate action, + * so that we can detect a reconnection from the agent and take appropriate action, * when the connection disappeared without the master noticing. * * @author Kohsuke Kawaguchi @@ -46,7 +46,7 @@ public class JnlpSlaveAgentProtocol2 extends JnlpSlaveAgentProtocol { } /** - * Handles JNLP slave agent connection request (v2 protocol) + * Handles JNLP agent connection request (v2 protocol) */ @Override protected void run() throws IOException, InterruptedException { diff --git a/core/src/main/java/jenkins/slaves/JnlpSlaveHandshake.java b/core/src/main/java/jenkins/slaves/JnlpSlaveHandshake.java index 4c9dcfa873..1b67b98ecf 100644 --- a/core/src/main/java/jenkins/slaves/JnlpSlaveHandshake.java +++ b/core/src/main/java/jenkins/slaves/JnlpSlaveHandshake.java @@ -8,7 +8,7 @@ import java.net.Socket; import java.util.concurrent.ExecutorService; /** - * Palette of objects to talk to the incoming JNLP slave connection. + * Palette of objects to talk to the incoming JNLP agent connection. * * @author Kohsuke Kawaguchi * @since 1.561 diff --git a/core/src/main/java/jenkins/slaves/WorkspaceLocator.java b/core/src/main/java/jenkins/slaves/WorkspaceLocator.java index 7c7cb38258..7a99dce1c5 100644 --- a/core/src/main/java/jenkins/slaves/WorkspaceLocator.java +++ b/core/src/main/java/jenkins/slaves/WorkspaceLocator.java @@ -8,7 +8,7 @@ import hudson.model.TopLevelItem; /** * Allow extensions to override workspace locations - * on given slaves or projects. + * on given agents or projects. * * @author ryan.campbell@gmail.com * @since 1.501 @@ -17,11 +17,11 @@ public abstract class WorkspaceLocator implements ExtensionPoint { /** * Allows extensions to customize the workspace path. The first non-null response - * will determine the path to the workspace on that slave. + * will determine the path to the workspace on that agent. * * @param item The toplevel item - * @param node The slave node - * @return The absolute FilePath to the workspace on the slave. + * @param node The agent node + * @return The absolute FilePath to the workspace on the agent. * Will be created if it doesn't exist. * */ diff --git a/core/src/main/java/jenkins/slaves/restarter/JnlpSlaveRestarterInstaller.java b/core/src/main/java/jenkins/slaves/restarter/JnlpSlaveRestarterInstaller.java index 61e21c4b18..d30d6d2281 100644 --- a/core/src/main/java/jenkins/slaves/restarter/JnlpSlaveRestarterInstaller.java +++ b/core/src/main/java/jenkins/slaves/restarter/JnlpSlaveRestarterInstaller.java @@ -21,11 +21,11 @@ import static java.util.logging.Level.*; import jenkins.security.MasterToSlaveCallable; /** - * Actual slave restart logic. + * Actual agent restart logic. * *

    * Use {@link ComputerListener} to install {@link EngineListener}, which in turn gets executed when - * the slave gets disconnected. + * the agent gets disconnected. * * @author Kohsuke Kawaguchi */ @@ -73,15 +73,15 @@ public class JnlpSlaveRestarterInstaller extends ComputerListener implements Ser try { for (SlaveRestarter r : restarters) { try { - LOGGER.info("Restarting slave via "+r); + LOGGER.info("Restarting agent via "+r); r.restart(); } catch (Exception x) { - LOGGER.log(SEVERE, "Failed to restart slave with "+r, x); + LOGGER.log(SEVERE, "Failed to restart agent with "+r, x); } } } finally { // if we move on to the reconnection without restart, - // don't let the current implementations kick in when the slave loses connection again + // don't let the current implementations kick in when the agent loses connection again restarters.clear(); } } diff --git a/core/src/main/java/jenkins/slaves/restarter/SlaveRestarter.java b/core/src/main/java/jenkins/slaves/restarter/SlaveRestarter.java index 84e88202c9..3484774e8e 100644 --- a/core/src/main/java/jenkins/slaves/restarter/SlaveRestarter.java +++ b/core/src/main/java/jenkins/slaves/restarter/SlaveRestarter.java @@ -7,22 +7,22 @@ import java.io.Serializable; import java.util.logging.Logger; /** - * Extension point to control how to restart JNLP slave when it loses the connection with the master. + * Extension point to control how to restart JNLP agent when it loses the connection with the master. * *

    - * Objects are instantiated on the master, then transferred to a slave via serialization. + * Objects are instantiated on the master, then transferred to an agent via serialization. * * @author Kohsuke Kawaguchi */ public abstract class SlaveRestarter implements ExtensionPoint, Serializable { /** - * Called on the slave to see if this restarter can work on this slave. + * Called on the agent to see if this restarter can work on this agent. */ public abstract boolean canWork(); /** * If {@link #canWork()} method returns true, this method is called later when - * the connection is lost to restart the slave. + * the connection is lost to restart the agent. * *

    * Note that by the time this method is called, classloader is no longer capable of @@ -32,8 +32,8 @@ public abstract class SlaveRestarter implements ExtensionPoint, Serializable { * *

    * This method is not expected to return, and the JVM should terminate before this call returns. - * If the method returns normally, the JNLP slave will move on to the reconnection without restart. - * If an exception is thrown, it is reported as an error and then the JNLP slave will move on to the + * If the method returns normally, the JNLP agent will move on to the reconnection without restart. + * If an exception is thrown, it is reported as an error and then the JNLP agent will move on to the * reconnection without restart. */ public abstract void restart() throws Exception; diff --git a/core/src/main/java/jenkins/tools/GlobalToolConfiguration.java b/core/src/main/java/jenkins/tools/GlobalToolConfiguration.java new file mode 100644 index 0000000000..209c4a1b72 --- /dev/null +++ b/core/src/main/java/jenkins/tools/GlobalToolConfiguration.java @@ -0,0 +1,109 @@ +/* + * The MIT License + * + * Copyright (c) 2016 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package jenkins.tools; + +import com.google.common.base.Predicate; +import hudson.Extension; +import hudson.Functions; +import hudson.model.Descriptor; +import hudson.model.ManagementLink; +import hudson.security.Permission; +import hudson.util.FormApply; +import jenkins.model.GlobalConfigurationCategory; +import jenkins.model.Jenkins; +import net.sf.json.JSONObject; + +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; + +import javax.servlet.ServletException; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; + +@Extension(ordinal = Integer.MAX_VALUE - 220) +@Restricted(NoExternalUse.class) +public class GlobalToolConfiguration extends ManagementLink { + + @Override + public String getIconFileName() { + return "setting.png"; + } + + @Override + public String getDisplayName() { + return jenkins.management.Messages.ConfigureTools_DisplayName(); + } + + @Override + public String getDescription() { + return jenkins.management.Messages.ConfigureTools_Description(); + } + + @Override + public String getUrlName() { + return "configureTools"; + } + + @Override + public Permission getRequiredPermission() { + return Jenkins.ADMINISTER; + } + + public synchronized void doConfigure(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { + boolean result = configure(req, req.getSubmittedForm()); + LOGGER.log(Level.FINE, "tools saved: "+result); + FormApply.success(req.getContextPath() + "/manage").generateResponse(req, rsp, null); + } + + private boolean configure(StaplerRequest req, JSONObject json) throws hudson.model.Descriptor.FormException, IOException { + Jenkins j = Jenkins.getInstance(); + j.checkPermission(Jenkins.ADMINISTER); + + boolean result = true; + for(Descriptor d : Functions.getSortedDescriptorsForGlobalConfig(FILTER)){ + result &= configureDescriptor(req, json, d); + } + j.save(); + + return result; + } + + private boolean configureDescriptor(StaplerRequest req, JSONObject json, Descriptor d) throws Descriptor.FormException { + String name = d.getJsonSafeClassName(); + JSONObject js = json.has(name) ? json.getJSONObject(name) : new JSONObject(); // if it doesn't have the property, the method returns invalid null object. + json.putAll(js); + return d.configure(req, js); + } + + public static Predicate FILTER = new Predicate() { + public boolean apply(GlobalConfigurationCategory input) { + return input instanceof ToolConfigurationCategory; + } + }; + + private static final Logger LOGGER = Logger.getLogger(GlobalToolConfiguration.class.getName()); +} diff --git a/core/src/main/java/jenkins/tools/ToolConfigurationCategory.java b/core/src/main/java/jenkins/tools/ToolConfigurationCategory.java new file mode 100644 index 0000000000..e785369556 --- /dev/null +++ b/core/src/main/java/jenkins/tools/ToolConfigurationCategory.java @@ -0,0 +1,21 @@ +package jenkins.tools; + +import hudson.Extension; +import jenkins.model.GlobalConfigurationCategory; + +/** + * Global configuration of tool locations and installers. + * + * @since 2.0 + */ +@Extension +public class ToolConfigurationCategory extends GlobalConfigurationCategory { + @Override + public String getShortDescription() { + return jenkins.management.Messages.ConfigureTools_Description(); + } + + public String getDisplayName() { + return jenkins.management.Messages.ConfigureTools_DisplayName(); + } +} diff --git a/core/src/main/java/jenkins/util/ResourceBundleUtil.java b/core/src/main/java/jenkins/util/ResourceBundleUtil.java new file mode 100644 index 0000000000..1649c6c77c --- /dev/null +++ b/core/src/main/java/jenkins/util/ResourceBundleUtil.java @@ -0,0 +1,91 @@ +/* + * The MIT License + * + * Copyright (c) 2015, CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package jenkins.util; + +import net.sf.json.JSONObject; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; + +import javax.annotation.Nonnull; +import java.util.Locale; +import java.util.Map; +import java.util.MissingResourceException; +import java.util.ResourceBundle; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Simple {@link java.util.ResourceBundle} utility class. + * @author tom.fennelly@gmail.com + * @since FIXME + */ +public class ResourceBundleUtil { + + private static final Map bundles = new ConcurrentHashMap<>(); + + private ResourceBundleUtil() { + } + + /** + * Get a bundle JSON using the default Locale. + * @param baseName The bundle base name. + * @return The bundle JSON. + * @throws MissingResourceException Missing resource bundle. + */ + @Restricted(NoExternalUse.class) + public static @Nonnull JSONObject getBundle(@Nonnull String baseName) throws MissingResourceException { + return getBundle(baseName, Locale.getDefault()); + } + + /** + * Get a bundle JSON using the supplied Locale. + * @param baseName The bundle base name. + * @param locale The Locale. + * @return The bundle JSON. + * @throws MissingResourceException Missing resource bundle. + */ + @Restricted(NoExternalUse.class) + public static @Nonnull JSONObject getBundle(@Nonnull String baseName, @Nonnull Locale locale) throws MissingResourceException { + String bundleKey = baseName + ":" + locale.toString(); + JSONObject bundleJSON = bundles.get(bundleKey); + + if (bundleJSON != null) { + return bundleJSON; + } + + ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale); + + bundleJSON = toJSONObject(bundle); + bundles.put(bundleKey, bundleJSON); + + return bundleJSON; + } + + private static JSONObject toJSONObject(@Nonnull ResourceBundle bundle) { + JSONObject json = new JSONObject(); + for (String key : bundle.keySet()) { + json.put(key, bundle.getString(key)); + } + return json; + } +} diff --git a/core/src/main/java/jenkins/util/io/OnMaster.java b/core/src/main/java/jenkins/util/io/OnMaster.java index ce84873df8..dccd02d6ce 100644 --- a/core/src/main/java/jenkins/util/io/OnMaster.java +++ b/core/src/main/java/jenkins/util/io/OnMaster.java @@ -2,12 +2,12 @@ package jenkins.util.io; /** * Marks the objects in Jenkins that only exist in the core - * and not on slaves. + * and not on agents. * *

    * This marker interface is for plugin developers to quickly * tell if they can take a specific object from a master to - * a slave. + * an agent. * * (Core developers, if you find classes/interfaces that extend * from this, please be encouraged to add them.) diff --git a/core/src/main/java/jenkins/util/xml/XMLUtils.java b/core/src/main/java/jenkins/util/xml/XMLUtils.java index 84e6f6151b..bf96669052 100644 --- a/core/src/main/java/jenkins/util/xml/XMLUtils.java +++ b/core/src/main/java/jenkins/util/xml/XMLUtils.java @@ -1,17 +1,28 @@ package jenkins.util.xml; +import org.apache.commons.io.IOUtils; import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.w3c.dom.Document; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.Charset; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; import javax.annotation.Nonnull; import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; @@ -19,6 +30,9 @@ import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.sax.SAXTransformerFactory; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; /** * Utilities useful when working with various XML types. @@ -29,6 +43,9 @@ public final class XMLUtils { private final static Logger LOGGER = LogManager.getLogManager().getLogger(XMLUtils.class.getName()); private final static String DISABLED_PROPERTY_NAME = XMLUtils.class.getName() + ".disableXXEPrevention"; + private static final String FEATURE_HTTP_XML_ORG_SAX_FEATURES_EXTERNAL_GENERAL_ENTITIES = "http://xml.org/sax/features/external-general-entities"; + private static final String FEATURE_HTTP_XML_ORG_SAX_FEATURES_EXTERNAL_PARAMETER_ENTITIES = "http://xml.org/sax/features/external-parameter-entities"; + /** * Transform the source to the output in a manner that is protected against XXE attacks. * If the transform can not be completed safely then an IOException is thrown. @@ -47,11 +64,11 @@ public final class XMLUtils { XMLReader xmlReader = XMLReaderFactory.createXMLReader(); try { - xmlReader.setFeature("http://xml.org/sax/features/external-general-entities", false); + xmlReader.setFeature(FEATURE_HTTP_XML_ORG_SAX_FEATURES_EXTERNAL_GENERAL_ENTITIES, false); } catch (SAXException ignored) { /* ignored */ } try { - xmlReader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); + xmlReader.setFeature(FEATURE_HTTP_XML_ORG_SAX_FEATURES_EXTERNAL_PARAMETER_ENTITIES, false); } catch (SAXException ignored) { /* ignored */ } // defend against XXE @@ -81,6 +98,106 @@ public final class XMLUtils { } } + /** + * Parse the supplied XML stream data to a {@link Document}. + *

    + * This function does not close the stream. + * + * @param stream The XML stream. + * @return The XML {@link Document}. + * @throws SAXException Error parsing the XML stream data e.g. badly formed XML. + * @throws IOException Error reading from the steam. + * @since FIXME + */ + public static @Nonnull Document parse(@Nonnull Reader stream) throws SAXException, IOException { + DocumentBuilder docBuilder; + + try { + docBuilder = newDocumentBuilderFactory().newDocumentBuilder(); + docBuilder.setEntityResolver(RestrictiveEntityResolver.INSTANCE); + } catch (ParserConfigurationException e) { + throw new IllegalStateException("Unexpected error creating DocumentBuilder.", e); + } + + return docBuilder.parse(new InputSource(stream)); + } + + /** + * Parse the supplied XML file data to a {@link Document}. + * @param file The file to parse. + * @param encoding The encoding of the XML in the file. + * @return The parsed document. + * @throws SAXException Error parsing the XML file data e.g. badly formed XML. + * @throws IOException Error reading from the file. + * @since FIXME + */ + public static @Nonnull Document parse(@Nonnull File file, @Nonnull String encoding) throws SAXException, IOException { + if (!file.exists() || !file.isFile()) { + throw new IllegalArgumentException(String.format("File %s does not exist or is not a 'normal' file.", file.getAbsolutePath())); + } + + FileInputStream fileInputStream = new FileInputStream(file); + try { + InputStreamReader fileReader = new InputStreamReader(fileInputStream, encoding); + try { + return parse(fileReader); + } finally { + IOUtils.closeQuietly(fileReader); + } + } finally { + IOUtils.closeQuietly(fileInputStream); + } + } + + /** + * The a "value" from an XML file using XPath. + *

    + * Uses the system encoding for reading the file. + * + * @param xpath The XPath expression to select the value. + * @param file The file to read. + * @return The data value. An empty {@link String} is returned when the expression does not evaluate + * to anything in the document. + * @throws IOException Error reading from the file. + * @throws SAXException Error parsing the XML file data e.g. badly formed XML. + * @throws XPathExpressionException Invalid XPath expression. + * @since FIXME + */ + public static @Nonnull String getValue(@Nonnull String xpath, @Nonnull File file) throws IOException, SAXException, XPathExpressionException { + return getValue(xpath, file, Charset.defaultCharset().toString()); + } + + /** + * The a "value" from an XML file using XPath. + * @param xpath The XPath expression to select the value. + * @param file The file to read. + * @param fileDataEncoding The file data format. + * @return The data value. An empty {@link String} is returned when the expression does not evaluate + * to anything in the document. + * @throws IOException Error reading from the file. + * @throws SAXException Error parsing the XML file data e.g. badly formed XML. + * @throws XPathExpressionException Invalid XPath expression. + * @since FIXME + */ + public static @Nonnull String getValue(@Nonnull String xpath, @Nonnull File file, @Nonnull String fileDataEncoding) throws IOException, SAXException, XPathExpressionException { + Document document = parse(file, fileDataEncoding); + return getValue(xpath, document); + } + + /** + * The a "value" from an XML file using XPath. + * @param xpath The XPath expression to select the value. + * @param document The document from which the value is to be extracted. + * @return The data value. An empty {@link String} is returned when the expression does not evaluate + * to anything in the document. + * @throws XPathExpressionException Invalid XPath expression. + * @since FIXME + */ + public static String getValue(String xpath, Document document) throws XPathExpressionException { + XPath xPathProcessor = XPathFactory.newInstance().newXPath(); + return xPathProcessor.compile(xpath).evaluate(document); + } + /** * potentially unsafe XML transformation. * @param source The XML input to transform. @@ -96,4 +213,25 @@ public final class XMLUtils { t.transform(source, out); } + private static DocumentBuilderFactory newDocumentBuilderFactory() { + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + // Set parser features to prevent against XXE etc. + // Note: setting only the external entity features on DocumentBuilderFactory instance + // (ala how safeTransform does it for SAXTransformerFactory) does seem to work (was still + // processing the entities - tried Oracle JDK 7 and 8 on OSX). Setting seems a bit extreme, + // but looks like there's no other choice. + documentBuilderFactory.setXIncludeAware(false); + documentBuilderFactory.setExpandEntityReferences(false); + setDocumentBuilderFactoryFeature(documentBuilderFactory, XMLConstants.FEATURE_SECURE_PROCESSING, true); + setDocumentBuilderFactoryFeature(documentBuilderFactory, FEATURE_HTTP_XML_ORG_SAX_FEATURES_EXTERNAL_GENERAL_ENTITIES, false); + setDocumentBuilderFactoryFeature(documentBuilderFactory, FEATURE_HTTP_XML_ORG_SAX_FEATURES_EXTERNAL_PARAMETER_ENTITIES, false); + setDocumentBuilderFactoryFeature(documentBuilderFactory, "http://apache.org/xml/features/disallow-doctype-decl", true); + + return documentBuilderFactory; + } + private static void setDocumentBuilderFactoryFeature(DocumentBuilderFactory documentBuilderFactory, String feature, boolean state) { + try { + documentBuilderFactory.setFeature(feature, state); + } catch (Exception e) {} + } } diff --git a/core/src/main/resources/hudson/PluginManager/_api.jelly b/core/src/main/resources/hudson/PluginManager/_api.jelly index cd15d1398d..8ef92ccf32 100644 --- a/core/src/main/resources/hudson/PluginManager/_api.jelly +++ b/core/src/main/resources/hudson/PluginManager/_api.jelly @@ -31,7 +31,7 @@ THE SOFTWARE.

    Making sure all the needed plugins are installed

    - Jenkins uses an XML format for representing most of complex objects internally (such as slaves, views, jobs, and builds.) + Jenkins uses an XML format for representing most of complex objects internally (such as agents, views, jobs, and builds.) As such, it has various APIs that send/receive those XMLs. For example, you can create a new job by POSTing its XML representation. Starting 1.482, Jenkins annotates these XMLs with additional information indicating what plugins have been used in them. This improves the portability of those XML files. diff --git a/core/src/main/resources/hudson/TcpSlaveAgentListener/index.jelly b/core/src/main/resources/hudson/TcpSlaveAgentListener/index.jelly index d2dc352fac..99585e9896 100644 --- a/core/src/main/resources/hudson/TcpSlaveAgentListener/index.jelly +++ b/core/src/main/resources/hudson/TcpSlaveAgentListener/index.jelly @@ -25,7 +25,7 @@ THE SOFTWARE. diff --git a/core/src/main/resources/hudson/lifecycle/Messages.properties b/core/src/main/resources/hudson/lifecycle/Messages.properties index 76609f4b61..0439ce0fca 100644 --- a/core/src/main/resources/hudson/lifecycle/Messages.properties +++ b/core/src/main/resources/hudson/lifecycle/Messages.properties @@ -22,7 +22,7 @@ WindowsInstallerLink.DisplayName=Install as Windows Service WindowsInstallerLink.Description=Installs Jenkins as a Windows service to this system, so that Jenkins starts automatically when the machine boots. -WindowsSlaveInstaller.ConfirmInstallation=This will install a slave agent as a Windows service, so that a Jenkins slave starts automatically when the machine boots. +WindowsSlaveInstaller.ConfirmInstallation=This will install an agent as a Windows service, so that a Jenkins agent starts automatically when the machine boots. WindowsSlaveInstaller.DotNetRequired=.NET Framework 2.0 or later is required for this feature WindowsSlaveInstaller.InstallationSuccessful=Installation was successful. Would you like to start the service now? -WindowsSlaveInstaller.RootFsDoesntExist=Slave root directory \u2018{0}\u2019 doesn\u2019t exist \ No newline at end of file +WindowsSlaveInstaller.RootFsDoesntExist=Agent root directory \u2018{0}\u2019 doesn\u2019t exist \ No newline at end of file diff --git a/core/src/main/resources/hudson/lifecycle/Messages_bg.properties b/core/src/main/resources/hudson/lifecycle/Messages_bg.properties index 9c994c04f8..16317ae27b 100644 --- a/core/src/main/resources/hudson/lifecycle/Messages_bg.properties +++ b/core/src/main/resources/hudson/lifecycle/Messages_bg.properties @@ -25,9 +25,6 @@ WindowsInstallerLink.DisplayName=\ WindowsInstallerLink.Description=\ \u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Jenkins \u043a\u0430\u0442\u043e \u0443\u0441\u043b\u0443\u0433\u0430 \u043d\u0430 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0438\u044f \u043d\u0430 \u0442\u0430\u0437\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 Windows, \u0437\u0430\ \u0434\u0430 \u043c\u043e\u0436\u0435 \u0442\u043e\u0439 \u0434\u0430 \u0441\u0435 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430 \u0437\u0430\u0435\u0434\u043d\u043e \u0441 \u043c\u0430\u0448\u0438\u043d\u0430\u0442\u0430. -WindowsSlaveInstaller.ConfirmInstallation=\ - \u0422\u043e\u0432\u0430 \u0449\u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u0430\u0433\u0435\u043d\u0442 \u043a\u0430\u0442\u043e \u0443\u0441\u043b\u0443\u0433\u0430 \u043d\u0430 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0438\u044f \u043d\u0430 \u0442\u0430\u0437\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\ - Windows, \u0437\u0430 \u0434\u0430 \u043c\u043e\u0436\u0435 \u0442\u043e\u0439 \u0434\u0430 \u0441\u0435 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430 \u0437\u0430\u0435\u0434\u043d\u043e \u0441 \u043c\u0430\u0448\u0438\u043d\u0430\u0442\u0430. WindowsSlaveInstaller.DotNetRequired=\ \u0417\u0430 \u0442\u043e\u0432\u0430 \u0441\u0435 \u0438\u0437\u0438\u0441\u043a\u0432\u0430 .NET Framework, \u0432\u0435\u0440\u0441\u0438\u044f 2.0 \u0438\u043b\u0438 \u043f\u043e-\u0432\u0438\u0441\u043e\u043a\u0430 WindowsSlaveInstaller.InstallationSuccessful=\ diff --git a/core/src/main/resources/hudson/lifecycle/Messages_da.properties b/core/src/main/resources/hudson/lifecycle/Messages_da.properties index 6cb6cfec1a..f6efe70ed1 100644 --- a/core/src/main/resources/hudson/lifecycle/Messages_da.properties +++ b/core/src/main/resources/hudson/lifecycle/Messages_da.properties @@ -22,7 +22,5 @@ WindowsInstallerLink.DisplayName=Installer som Windows service WindowsSlaveInstaller.DotNetRequired=Denne feature kr\u00e6ver .NET framework 2.0 eller nyere -WindowsSlaveInstaller.RootFsDoesntExist=Slave roddirektorie ''{0}'' findes ikke WindowsSlaveInstaller.InstallationSuccessful=Installationen lykkedes. Vil du gerne starte service''en nu ? WindowsInstallerLink.Description=Installerer Jenkins som en Windows service p\u00e5 denne computer, s\u00e5 Jenkins starter automatisk n\u00e5r computeren starter op. -WindowsSlaveInstaller.ConfirmInstallation=Dette vil installere en Jenkins slave agent som en Windows service, s\u00e5 Jenkins slaven vil starte automatisk n\u00e5r computeren starter op. diff --git a/core/src/main/resources/hudson/lifecycle/Messages_de.properties b/core/src/main/resources/hudson/lifecycle/Messages_de.properties index 83960e0ee6..76ac1a4776 100644 --- a/core/src/main/resources/hudson/lifecycle/Messages_de.properties +++ b/core/src/main/resources/hudson/lifecycle/Messages_de.properties @@ -24,7 +24,5 @@ WindowsInstallerLink.DisplayName=Als Windows-Dienst installieren WindowsInstallerLink.Description=\ Installiert Jenkins als Windows-Dienst: Dadurch wird Jenkins \ automatisch nach einem Neustart des Rechners gestartet. -WindowsSlaveInstaller.ConfirmInstallation=Dies installiert einen Slave-Agent als Windows-Dienst. WindowsSlaveInstaller.DotNetRequired=.NET Framework 2.0 oder höher ist für dieses Funktionsmerkmal erforderlich. WindowsSlaveInstaller.InstallationSuccessful=Installation erfolgreich. Möchten Sie den Dienst jetzt starten? -WindowsSlaveInstaller.RootFsDoesntExist=Stammverzeichnis ''{0}'' existiert auf dem Slave-Knoten nicht. \ No newline at end of file diff --git a/core/src/main/resources/hudson/lifecycle/Messages_es.properties b/core/src/main/resources/hudson/lifecycle/Messages_es.properties index e4618b85a4..2a1031893c 100644 --- a/core/src/main/resources/hudson/lifecycle/Messages_es.properties +++ b/core/src/main/resources/hudson/lifecycle/Messages_es.properties @@ -22,7 +22,7 @@ WindowsInstallerLink.DisplayName=Instalar como un servicio de Windows WindowsInstallerLink.Description=Instalar Jenkins como un servicio de Windows en este sistema, de manera que Jenkins se inicie cuando el sistema arranque. -WindowsSlaveInstaller.ConfirmInstallation=Esto instalará el agente esclavo como un servicio de Windows. +WindowsSlaveInstaller.ConfirmInstallation=Esto instalará el agente como un servicio de Windows. WindowsSlaveInstaller.DotNetRequired=Es necesario tener instalado: .NET Framework 2.0 o posterior, para que esta característica funcione. WindowsSlaveInstaller.InstallationSuccessful=La instalación ha sido correcta. ¿Quieres arrancar el servicio ahora? -WindowsSlaveInstaller.RootFsDoesntExist=El directorio raiz {0} en el esclavo no existe. +WindowsSlaveInstaller.RootFsDoesntExist=El directorio raiz {0} en el agente no existe. diff --git a/core/src/main/resources/hudson/lifecycle/Messages_ja.properties b/core/src/main/resources/hudson/lifecycle/Messages_ja.properties index e157bec5ef..481cbd8d0e 100644 --- a/core/src/main/resources/hudson/lifecycle/Messages_ja.properties +++ b/core/src/main/resources/hudson/lifecycle/Messages_ja.properties @@ -22,7 +22,6 @@ WindowsInstallerLink.DisplayName=Windows\u306E\u30B5\u30FC\u30D3\u30B9\u3068\u3057\u3066\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB WindowsInstallerLink.Description=\u30DE\u30B7\u30F3\u304C\u30D6\u30FC\u30C8\u3057\u305F\u3068\u304D\u306BJenkins\u304C\u81EA\u52D5\u7684\u306B\u958B\u59CB\u3059\u308B\u3088\u3046\u306B\u3001Windows\u306E\u30B5\u30FC\u30D3\u30B9\u3068\u3057\u3066Jenkins\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u307E\u3059\u3002 -WindowsSlaveInstaller.ConfirmInstallation=\u30B9\u30EC\u30FC\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092Windows\u306E\u30B5\u30FC\u30D3\u30B9\u3068\u3057\u3066\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u307E\u3059\u3002 WindowsSlaveInstaller.DotNetRequired=.NET Framework 2.0 \u4EE5\u964D\u304C\u5FC5\u8981\u3067\u3059\u3002 WindowsSlaveInstaller.InstallationSuccessful=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u304C\u6210\u529F\u3057\u307E\u3057\u305F\u3002\u4ECA\u3059\u3050\u30B5\u30FC\u30D3\u30B9\u3092\u958B\u59CB\u3057\u307E\u3059\u304B? -WindowsSlaveInstaller.RootFsDoesntExist=\u30B9\u30EC\u30FC\u30D6\u306E\u30EB\u30FC\u30C8\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA ''{0}'' \u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3002 \ No newline at end of file +WindowsSlaveInstaller.RootFsDoesntExist=\u30B9\u30EC\u30FC\u30D6\u306E\u30EB\u30FC\u30C8\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA ''{0}'' \u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3002 diff --git a/core/src/main/resources/hudson/lifecycle/Messages_pt_BR.properties b/core/src/main/resources/hudson/lifecycle/Messages_pt_BR.properties index a280eaee0c..e2d80763ab 100644 --- a/core/src/main/resources/hudson/lifecycle/Messages_pt_BR.properties +++ b/core/src/main/resources/hudson/lifecycle/Messages_pt_BR.properties @@ -22,12 +22,8 @@ # Install as Windows Service WindowsInstallerLink.DisplayName=Instalar como um servi\u00e7o do Windows -# Slave root directory ''{0}'' doesn''t exist -WindowsSlaveInstaller.RootFsDoesntExist=Diret\u00f3rio slave ''{0}'' n\u00e3o existe # .NET Framework 2.0 or later is required for this feature WindowsSlaveInstaller.DotNetRequired=Framework .NET 2.0 ou superior \u00e9 necess\u00e1rio -# This will install a slave agent as a Windows service, so that a Jenkins slave starts automatically when the machine boots. -WindowsSlaveInstaller.ConfirmInstallation=Isso instalar\u00e1 o agente slave como um servi\u00e7o do Windows, portanto ser\u00e1 iniciado junto com o Sistema Operacional # Installation was successful. Would you like to start the service now? WindowsSlaveInstaller.InstallationSuccessful=Instala\u00e7\u00e3o efetuada com sucesso. Gostaria de iniciar o servi\u00e7o agora? # Installs Jenkins as a Windows service to this system, so that Jenkins starts automatically when the machine boots. diff --git a/core/src/main/resources/hudson/lifecycle/Messages_zh_TW.properties b/core/src/main/resources/hudson/lifecycle/Messages_zh_TW.properties index 261fc2d0f2..6986de32c6 100644 --- a/core/src/main/resources/hudson/lifecycle/Messages_zh_TW.properties +++ b/core/src/main/resources/hudson/lifecycle/Messages_zh_TW.properties @@ -22,7 +22,5 @@ WindowsInstallerLink.DisplayName=\u5b89\u88dd\u6210 Windows \u670d\u52d9 WindowsInstallerLink.Description=\u5c07 Jenkins \u5b89\u88dd\u6210 Windows \u670d\u52d9\uff0c\u958b\u6a5f\u5f8c Jenkins \u5c31\u6703\u81ea\u52d5\u555f\u52d5\u3002 -WindowsSlaveInstaller.ConfirmInstallation=\u5c07\u628a Slave \u4ee3\u7406\u7a0b\u5f0f\u5b89\u88dd\u6210 Windows \u670d\u52d9\uff0c\u958b\u6a5f\u5f8c Jenkins Slave \u5c31\u6703\u81ea\u52d5\u555f\u52d5\u3002 WindowsSlaveInstaller.DotNetRequired=\u672c\u529f\u80fd\u9700\u8981 .NET Framework 2.0 \u6216\u662f\u66f4\u65b0\u7684\u7248\u672c WindowsSlaveInstaller.InstallationSuccessful=\u5b89\u88dd\u5b8c\u6210\u3002\u60a8\u8981\u99ac\u4e0a\u555f\u52d5\u670d\u52d9\u55ce? -WindowsSlaveInstaller.RootFsDoesntExist=Slave \u6839\u76ee\u9304 ''{0}'' \u4e0d\u5b58\u5728 \ No newline at end of file diff --git a/core/src/main/resources/hudson/logging/LogRecorder/sidepanel.jelly b/core/src/main/resources/hudson/logging/LogRecorder/sidepanel.jelly index b9c8884ff2..686f05cf7e 100644 --- a/core/src/main/resources/hudson/logging/LogRecorder/sidepanel.jelly +++ b/core/src/main/resources/hudson/logging/LogRecorder/sidepanel.jelly @@ -32,7 +32,7 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/hudson/logging/LogRecorderManager/index.jelly b/core/src/main/resources/hudson/logging/LogRecorderManager/index.jelly index 7b6e2d677e..e188caed69 100644 --- a/core/src/main/resources/hudson/logging/LogRecorderManager/index.jelly +++ b/core/src/main/resources/hudson/logging/LogRecorderManager/index.jelly @@ -59,7 +59,7 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/hudson/logging/LogRecorderManager/sidepanel.jelly b/core/src/main/resources/hudson/logging/LogRecorderManager/sidepanel.jelly index d3d6da9935..c27d64b58a 100644 --- a/core/src/main/resources/hudson/logging/LogRecorderManager/sidepanel.jelly +++ b/core/src/main/resources/hudson/logging/LogRecorderManager/sidepanel.jelly @@ -31,7 +31,7 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/hudson/model/AbstractBuild/index_pt_BR.properties b/core/src/main/resources/hudson/model/AbstractBuild/index_pt_BR.properties index 7e954f6854..83030bc367 100644 --- a/core/src/main/resources/hudson/model/AbstractBuild/index_pt_BR.properties +++ b/core/src/main/resources/hudson/model/AbstractBuild/index_pt_BR.properties @@ -32,5 +32,4 @@ Upstream\ Builds=builds pai Downstream\ Builds=builds filho none=nenhum Took=Demorou -on=no slave Build=Build diff --git a/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity.html b/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity.html index 02ca436656..61dd733294 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity.html +++ b/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity.html @@ -1,17 +1,15 @@

    - Sometimes a project can only be successfully built on a particular slave - (or master). If so, this option forces Jenkins to always build this project - on a specific computer. - - If there is a group of machines that the job can be built on, you can specify - that label as the node to tie on, which will cause Jenkins to build the - project on any of the machines with that label. - + By default, builds of this project may be executed on any build agents that + are available and configured to accept new builds.

    - Otherwise, uncheck the box so that Jenkins can schedule builds on available - nodes, which results in faster turn-around time. - + When this option is checked, you have the possibility to ensure that builds of + this project only occur on a certain agent, or set of agents.

    - This option is also useful when you'd like to make sure that a project can - be built on a particular node. -

    \ No newline at end of file + For example, if your project should only be built on a certain operating + system, or on machines that have a certain set of tools installed, or even one + specific machine, you can restrict this project to only execute on agents that + that meet those criteria. +

    + The help text for the Label Expression field, shown when this option is + checked, provides more detailed information on how to specify agent criteria. + diff --git a/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_de.html b/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_de.html.lang,slave_rename similarity index 88% rename from core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_de.html rename to core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_de.html.lang,slave_rename index c942b354be..f2c9cd86a0 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_de.html +++ b/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_de.html.lang,slave_rename @@ -1,5 +1,5 @@

    - Manchmal kann ein Projekt nur auf einem bestimmten Slave-Knoten (oder + Manchmal kann ein Projekt nur auf einem bestimmten Agent-Knoten (oder Master-Knoten) erfolgreich gebaut werden. In diesem Fall sollte diese Option angewählt werden, so daß Jenkins diff --git a/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_pt_BR.html b/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_pt_BR.html deleted file mode 100644 index d5af2f57af..0000000000 --- a/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_pt_BR.html +++ /dev/null @@ -1,12 +0,0 @@ -v> - Algumas vezes um projeto só pode ser construído com sucesso em um slave - (ou master) em particular. Se for assim, esta opção força o Jenkins a sempre construir este projeto - em um computadore específico. - - Caso contrário, desmarque a caixa e assim o Jenkins pode agendar construções nos nós - disponíveis, o que resulta em tempos de resposta mais rápidos. - -

    - Esta opção tamém é últil quando você quiser ter certeza que um projeto pode - ser construído em um nó particular. -

    diff --git a/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_tr.html b/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_tr.html deleted file mode 100644 index a5ea3ee54e..0000000000 --- a/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_tr.html +++ /dev/null @@ -1,11 +0,0 @@ -
    - Bazı projeler sadece belirli slave'lerde (master'da olabilir) başarı ile yapılandırılır, - bu tür durumlar için, bu seçenek projeyi daima belirli bir bilgisayarda yapılandırır. - - Aksi takdirde, kutucuğu seçili değil halde bırakırsanız, Jenkins yapılandırmayı, herhangi - bir nod üzerinde yürütür. - -

    - Bir projenin sadece belli bir nod üzerinde çalışmasını istiyorsanız bu seçenek işinize - yarayacaktır. -

    \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_zh_TW.html b/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_zh_TW.html deleted file mode 100644 index 1b6c7e06cd..0000000000 --- a/core/src/main/resources/hudson/model/AbstractItem/help-slaveAffinity_zh_TW.html +++ /dev/null @@ -1,12 +0,0 @@ -
    - 有時候專案只能在特定的 Slave (或 Master) 上才能成功建置。 - 如果有這個情形,請設定這個選項,強制 Jenkins 都只在特定電腦上建置這個專案。 - - 如果有一群主機可以建置這個專案,您可以用標籤限定要執行的節點,Jenkins 就會在有指定相同標籤的機器中挑一台來建置專案。 - -

    - 否則請不要啟用這個功能,讓 Jenkins 盡量利用有空的節點來建置,等候及執行的時間也會比較短。 - -

    - 透過這個選項,也可以讓您確認專案是否能在特定節點上建置。 -

    \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace.jelly b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace.jelly index 4882cfc5da..6a93fc14b4 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace.jelly +++ b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace.jelly @@ -45,7 +45,7 @@ THE SOFTWARE. ${%The project was renamed recently and no build was done under the new name.}
  • - ${%The slave this project has run on for the last time was removed.} + ${%The agent this project has run on for the last time was removed.}
  • ${%li3(it.workspace)} diff --git a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_da.properties b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_da.properties index 3db6b4afee..38f08ccf26 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_da.properties +++ b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_da.properties @@ -27,4 +27,3 @@ The\ project\ was\ renamed\ recently\ and\ no\ build\ was\ done\ under\ the\ new Projektet er blevet omd\u00f8bt for nyligt og ingen byg er endnu udf\u00f8rt under det nye navn Error\:\ no\ workspace=Fejl: intet arbejdsomr\u00e5de text=K\u00f8r et byg for at f\u00e5 Jenkins til at lave et arbejdsomr\u00e5de. -The\ slave\ this\ project\ has\ run\ on\ for\ the\ last\ time\ was\ removed.=Slaven projektet sidst k\u00f8rte p\u00e5 er blevet fjernet. diff --git a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_de.properties b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_de.properties index 784afb23af..7c56bb5ee4 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_de.properties +++ b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_de.properties @@ -27,8 +27,6 @@ There's\ no\ workspace\ for\ this\ project.\ Possible\ reasons\ are\:=\ Es existiert kein Arbeitsbereich für dieses Projekt. Mögliche Gründe sind: The\ project\ was\ renamed\ recently\ and\ no\ build\ was\ done\ under\ the\ new\ name.=\ Das Projekt wurde vor kurzem umbenannt und noch kein Build unter dem neuen Namen ausgeführt. -The\ slave\ this\ project\ has\ run\ on\ for\ the\ last\ time\ was\ removed.=\ - Der Slave, auf dem dieses Projekt das letzte Mal ausgeführt wurde, wurde entfernt. li3=Das Arbeitsbereichsverzeichnis ({0}) wurde außerhalb von Jenkins entfernt. text=Starten Sie einen Build, um von Jenkins einen Arbeitsbereich anlegen zu lassen. The\ workspace\ was\ wiped\ out\ and\ no\ build\ has\ been\ done\ since\ then.=Der Arbeitsbereich wurde gel\u00F6scht und es wurde seitdem kein Build durchgef\u00FChrt. diff --git a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_es.properties b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_es.properties index fc9d13524e..58f2750bb3 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_es.properties +++ b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_es.properties @@ -26,7 +26,7 @@ text=Lanzar una ejecuci There''s\ no\ workspace\ for\ this\ project.\ Possible\ reasons\ are\:=No hay espacio de trabajo para este proyecto, las causas posibles son: The\ project\ was\ renamed\ recently\ and\ no\ build\ was\ done\ under\ the\ new\ name.=El proyecto se ha renombrado y no se a ejecutado desde entonces Error\:\ no\ workspace=Error, no hay espacio de trabajo -The\ slave\ this\ project\ has\ run\ on\ for\ the\ last\ time\ was\ removed.=El nodo esclavo donde se ejecutó la última vez se ha eliminado +The\ agent\ this\ project\ has\ run\ on\ for\ the\ last\ time\ was\ removed.=El agente donde se ejecutó la última vez se ha eliminado The\ workspace\ was\ wiped\ out\ and\ no\ build\ has\ been\ done\ since\ then.=El espacio de trabajo se ha borrado, y no se ha ejecutado la tarea desde entonces. diff --git a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_fr.properties b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_fr.properties index 70d43848b3..09aa434739 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_fr.properties +++ b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_fr.properties @@ -24,6 +24,5 @@ Error\:\ no\ workspace=Erreur : pas de workspace A\ project\ won't\ have\ any\ workspace\ until\ at\ least\ one\ build\ is\ performed.=Un projet n''a pas de workspace avant un premier build. There's\ no\ workspace\ for\ this\ project.\ Possible\ reasons\ are\:=Il n''y a pas de workspace existant pour ce projet. Les raisons possibles sont : The\ project\ was\ renamed\ recently\ and\ no\ build\ was\ done\ under\ the\ new\ name.=Le projet a \u00e9t\u00e9 renomm\u00e9 r\u00e9cemment et aucun build n''a \u00e9t\u00e9 fait avec ce nouveau nom. -The\ slave\ this\ project\ has\ run\ on\ for\ the\ last\ time\ was\ removed.=La machine esclave sur laquelle ce projet a \u00e9t\u00e9 lanc\u00e9 pour la derni\u00e8re fois a \u00e9t\u00e9 retir\u00e9e. li3=Le r\u00e9pertoire de travail ({0}) a \u00e9t\u00e9 d\u00e9plac\u00e9 hors de Jenkins. text=Lancer un build afin de faire cr\u00e9er un workspace par Jenkins. diff --git a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_ja.properties b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_ja.properties index 6f2a4b5185..f8332b3369 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_ja.properties +++ b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_ja.properties @@ -27,8 +27,6 @@ There''s\ no\ workspace\ for\ this\ project.\ Possible\ reasons\ are\:=\ \u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\u4ee5\u4e0b\u306e\u7406\u7531\u304c\u8003\u3048\u3089\u308c\u307e\u3059\u3002 The\ project\ was\ renamed\ recently\ and\ no\ build\ was\ done\ under\ the\ new\ name.=\ \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u306b\u5909\u66f4\u3055\u308c\u305f\u5f8c\u306b\u3001\u305d\u306e\u540d\u524d\u3067\u30d3\u30eb\u30c9\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u306a\u3044\u3002 -The\ slave\ this\ project\ has\ run\ on\ for\ the\ last\ time\ was\ removed.=\ - \u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6700\u5f8c\u306b\u5b9f\u884c\u3057\u305f\u30b9\u30ec\u30fc\u30d6\u304c\u3001\u5916\u3055\u308c\u305f\u3002 li3=\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\uff08{0}\uff09\u304cJenkins\u306e\u7ba1\u7406\u5916\u3078\u53d6\u308a\u9664\u304b\u308c\u305f\u3002 text=\u30d3\u30eb\u30c9\u3092\u5b9f\u884c\u3057\u3066\u3001\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002 The\ workspace\ was\ wiped\ out\ and\ no\ build\ has\ been\ done\ since\ then.=\ diff --git a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_nl.properties b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_nl.properties index a569ad3122..2e441f2040 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_nl.properties +++ b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_nl.properties @@ -24,6 +24,5 @@ Error\:\ no\ workspace=Fout : geen werkplaats beschikbaar A\ project\ won't\ have\ any\ workspace\ until\ at\ least\ one\ build\ is\ performed.=Een project zal geen werkplaats hebben tot er op zijn mins \u00E9\u00E9n bouwpoging plaatsgevonden heeft. There's\ no\ workspace\ for\ this\ project.\ Possible\ reasons\ are\:=Er is geen werkplaats beschikbaar voor dit project. Mogelijke redenen zijn : The\ project\ was\ renamed\ recently\ and\ no\ build\ was\ done\ under\ the\ new\ name.=Dit project werd hernoemd en heeft nog bouwpoging plaats gevonden onder de nieuwe naam. -The\ slave\ this\ project\ has\ run\ on\ for\ the\ last\ time\ was\ removed.=De slaafnode die dit project het laatst gebouwd heeft werd verwijderd. li3=Het pad naar de werkplaats ({0}) werd buiten Jenkins verwijderd. text=Lanceer een bouwpoging om Jenkins de werkplaats te laten cre\u00EBren. diff --git a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_pt_BR.properties b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_pt_BR.properties index a05b677545..7abc056705 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_pt_BR.properties +++ b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_pt_BR.properties @@ -22,7 +22,6 @@ Error\:\ no\ workspace=Erro: nenhum workspace The\ project\ was\ renamed\ recently\ and\ no\ build\ was\ done\ under\ the\ new\ name.=O projeto foi renomeado recentemente e nenhum build foi feito com um novo nome. -The\ slave\ this\ project\ has\ run\ on\ for\ the\ last\ time\ was\ removed.=A m\u00e1quina slave onde esse projeto executou pela ultima vez foi removida. li3=O diret\u00f3rio de workspace ({0}) foi removido externamente ao Jenkins. text=Execute um build para que o Jenkins crie um workspace. There''s\ no\ workspace\ for\ this\ project.\ Possible\ reasons\ are\:=N\u00e3o existe nenhum workspace dispon\u00edvel para esse projeto diff --git a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_ru.properties b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_ru.properties index d3cd6ba59d..ca520bc3df 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_ru.properties +++ b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_ru.properties @@ -27,7 +27,5 @@ There's\ no\ workspace\ for\ this\ project.\ Possible\ reasons\ are\:=\ \u0421\u0431\u043e\u0440\u043e\u0447\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b: The\ project\ was\ renamed\ recently\ and\ no\ build\ was\ done\ under\ the\ new\ name.=\ \u041f\u0440\u043e\u0435\u043a\u0442 \u0431\u044b\u043b \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d \u0438 \u0441\u0431\u043e\u0440\u043e\u043a \u043f\u043e\u0434 \u043d\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0435\u0449\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e. -The\ slave\ this\ project\ has\ run\ on\ for\ the\ last\ time\ was\ removed.=\ - \u041f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437, \u0431\u044b\u043b \u0443\u0434\u0430\u043b\u0435\u043d. li3=\u0421\u0431\u043e\u0440\u043e\u0447\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f ({0}) \u0431\u044b\u043b\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0430 \u0438\u0437 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 Jenkins. text=\u0417\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u0431\u043E\u0440\u043A\u0443, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u044C Jenkins \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u0441\u0431\u043E\u0440\u043E\u0447\u043D\u0443\u044E \u0434\u0438\u0440\u0435\u043A\u0442\u043E\u0440\u0438\u044E. diff --git a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_tr.properties b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_tr.properties index aa57c21449..0696ad6f25 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_tr.properties +++ b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_tr.properties @@ -26,4 +26,3 @@ Error\:\ no\ workspace=Hata\:\ \u00c7al\u0131\u015fma Alan\u0131 mevcut de\u011f A\ project\ won't\ have\ any\ workspace\ until\ at\ least\ one\ build\ is\ performed.=Bir\ proje,\ en\ az\u0131ndan\ bir\ yap\u0131land\u0131rma\ \u00e7al\u0131\u015ft\u0131r\u0131lmadan\ bir\ \u00e7al\u0131\u015fma\ alan\u0131na\ sahip\ olamaz. There's\ no\ workspace\ for\ this\ project.\ Possible\ reasons\ are\:=Bu\ projenin\ bir\ \u00e7al\u0131\u015fma\ alan\u0131\ yok.\ Muhtemel\ sebepler\: The\ project\ was\ renamed\ recently\ and\ no\ build\ was\ done\ under\ the\ new\ name.=Projenin\ ismi\ yeni\ de\u011fi\u015ftirildi\ ve\ yeni\ isim\ alt\u0131nda\ herhangi\ bir\ yap\u0131land\u0131rma\ \u00e7al\u0131\u015ft\u0131r\u0131lmad\u0131. -The\ slave\ this\ project\ has\ run\ on\ for\ the\ last\ time\ was\ removed.=Bu projenin en son \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131 slave silinmi\u015f. diff --git a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_zh_TW.properties b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_zh_TW.properties index 3c48727421..c3b0d8184a 100644 --- a/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_zh_TW.properties +++ b/core/src/main/resources/hudson/model/AbstractItem/noWorkspace_zh_TW.properties @@ -26,7 +26,6 @@ A\ project\ won't\ have\ any\ workspace\ until\ at\ least\ one\ build\ is\ perfo There's\ no\ workspace\ for\ this\ project.\ Possible\ reasons\ are\:=\ \u5c08\u6848\u6c92\u6709\u5de5\u4f5c\u5340\u3002\u53ef\u80fd\u7684\u539f\u56e0\u6709: The\ project\ was\ renamed\ recently\ and\ no\ build\ was\ done\ under\ the\ new\ name.=\u5C08\u6848\u6700\u8FD1\u6539\u540D\u4E86\uFF0C\u800C\u4E14\u6539\u540D\u5F8C\u9084\u6C92\u5EFA\u7F6E\u904E\u3002 -The\ slave\ this\ project\ has\ run\ on\ for\ the\ last\ time\ was\ removed.=\u6700\u5F8C\u4E00\u6B21\u5EFA\u7F6E\u672C\u5C08\u6848\u7684 Slave \u88AB\u79FB\u9664\u4E86\u3002 li3=\u5DE5\u4F5C\u5340\u76EE\u9304 ({0}) \u5728 Jenkins \u5916\u88AB\u522A\u9664\u4E86\u3002 The\ workspace\ was\ wiped\ out\ and\ no\ build\ has\ been\ done\ since\ then.=\u5DE5\u4F5C\u5340\u88AB\u6E05\u9664\uFF0C\u800C\u4E14\u5230\u76EE\u524D\u70BA\u6B62\u9084\u6C92\u6709\u5EFA\u7F6E\u904E\u3002 diff --git a/core/src/main/resources/hudson/model/AbstractProject/configure-common.jelly b/core/src/main/resources/hudson/model/AbstractProject/configure-common.jelly index 62b5bd176a..806067f210 100644 --- a/core/src/main/resources/hudson/model/AbstractProject/configure-common.jelly +++ b/core/src/main/resources/hudson/model/AbstractProject/configure-common.jelly @@ -48,19 +48,17 @@ THE SOFTWARE. - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/core/src/main/resources/hudson/model/AbstractProject/help-concurrentBuild.html b/core/src/main/resources/hudson/model/AbstractProject/help-concurrentBuild.html index 6c5752360a..7d2116b37a 100644 --- a/core/src/main/resources/hudson/model/AbstractProject/help-concurrentBuild.html +++ b/core/src/main/resources/hudson/model/AbstractProject/help-concurrentBuild.html @@ -1,24 +1,39 @@ +
    - If this option is checked, Jenkins will schedule and execute multiple builds concurrently (provided - that you have sufficient executors and incoming build requests.) This is useful on builds and test jobs that - take a long time, as each build will only contain a smaller number of changes, and the total turn-around - time decreases due to the shorter time a build request spends waiting for the previous build to complete. - It is also very useful with parameterized builds, whose individual executions are independent from each other. - -

    - For other kinds of jobs, allowing concurrent executions of multiple builds may be problematic, - for example if it assumes a monopoly on a certain resource, like database, or for jobs where you use Jenkins - as a cron replacement. - -

    - If you use a custom workspace and enable this option, all your builds will run on the same workspace, - thus unless a care is taken by your side, it'll likely to collide with each other. - Otherwise, even when they are run on the same node, Jenkins will use different workspaces to keep - them isolated. - -

    - When Jenkins creates different workspaces for isolation, Jenkins appends "@num" to the - workspace directory name, e.g. "@2". The separator "@" can be configured by setting the system property - "hudson.slaves.WorkspaceList" to the desired separator string on the Jenkins command line. - E.g. "-Dhudson.slaves.WorkspaceList=-" will use a dash as separator. + When this option is checked, multiple builds of this project may be executed + in parallel. +

    + By default, only a single build of a project is executed at a time — any + other requests to start building that project will remain in the build queue + until the first build is complete.
    + This is a safe default, as projects can often require exclusive access to + certain resources, such as a database, or a piece of hardware. +

    + But with this option enabled, if there are enough build executors available + that can handle this project, then multiple builds of this project will take + place in parallel. If there are not enough available executors at any point, + any further build requests will be held in the build queue as normal. +

    + Enabling concurrent builds is useful for projects that execute lengthy test + suites, as it allows each build to contain a smaller number of changes, while + the total turnaround time decreases as subsequent builds do not need to wait + for previous test runs to complete.
    + This feature is also useful for parameterised projects, whose individual build + executions — depending on the parameters used — can be + completely independent from one another. +

    + Each concurrently executed build occurs in its own build workspace, isolated + from any other builds. By default, Jenkins appends "@<num>" to + the workspace directory name, e.g. "@2".
    + The separator "@" can be changed by setting the + hudson.slaves.WorkspaceList Java system property when starting + Jenkins. For example, "hudson.slaves.WorkspaceList=-" would change + the separator to a hyphen.
    + For more information on setting system properties, see the wiki page. +

    + However, if you enable the Use custom workspace option, all builds will + be executed in the same workspace. Therefore caution is required, as multiple + builds may end up altering the same directory at the same time.

    diff --git a/core/src/main/resources/hudson/model/AbstractProject/help-label.html b/core/src/main/resources/hudson/model/AbstractProject/help-label.html index e854b1d17b..df1b6a104a 100644 --- a/core/src/main/resources/hudson/model/AbstractProject/help-label.html +++ b/core/src/main/resources/hudson/model/AbstractProject/help-label.html @@ -1,52 +1,128 @@
    - If you want to always run this project on a specific node/slave, just specify its name. - This works well when you have a small number of nodes. + Defines a logical expression which determines which agents may execute builds + of this project. This expression, when tested against the name and labels of + each available agent, will be either true or false. If the + expression evaluates to true, then that agent will be allowed to + execute builds of this project. +

    + If this project should always be built on a specific agent, or on the Jenkins + master, then you can just enter the agent's name, or master, + respectively. +

    + However, you should generally avoid using the Name of an agent here, + preferring to target the Labels of an agent. As documented on the + configuration page for each agent, and the Configure System page for + the master, labels can be used to represent which operating system the agent + is running on, its CPU architecture, or any number of other characteristics. +
    + Using labels removes the need to re-configure the label expression entered + here each time that you add, remove, or rename agents. +

    + A label expression can be as simple as entering a single label or + agent name, for example android-builder, or + linux-machine-42.
    + You can also make use of various operators to create more complex + expressions. -

    - As the size of the cluster grows, it becomes useful not to tie projects to specific slaves, - as it hurts resource utilization when slaves may come and go. For such situation, assign labels - to slaves to classify their capabilities and characteristics, and specify a boolean expression - over those labels to decide where to run. +

    Supported operators

    + The following operators are supported, in descending order of precedence: +
    +
    (expression)
    +
    + parentheses — used to explicitly define the associativity of an expression +
    -

    Valid Operators

    -

    - The following operators are supported, in the order of precedence. -

    -
    (expr)
    -
    parenthesis
    +
    !expression
    +
    + NOT — negation; the result of expression must not be true +
    -
    !expr
    -
    negation
    +
    a && b
    +
    + AND — both of the expressions a and b must be + true +
    -
    expr&&expr
    -
    - and -
    +
    a || b
    +
    + OR — either of the expressions a or b may be + true +
    -
    expr||expr
    -
    - or -
    +
    a -> b
    +
    + "implies" operator — equivalent to !a || b.
    + For example, windows -> x64 could be thought of as "if a Windows + agent is used, then that agent must be 64-bit", while still + allowing this project to be executed on any agents that do not have + the windows label, regardless of whether they have also have an + x64 label +
    -
    a -> b
    -
    - "implies" operator. Equivalent to !a|b. - For example, windows->x64 could be thought of as "if run on a Windows slave, - that slave must be 64bit." It still allows Jenkins to run this build on linux. -
    +
    a <-> b
    +
    + "if and only if" operator — equivalent to a && b || + !a && !b
    + For example, windows <-> dc2 could be thought of as "if a + Windows agent is used, then that agent must be in datacenter 2, but + if a non-Windows agent is used, then it must not be in datacenter + 2" +
    +
    -
    a <-> b
    -
    - "if and only if" operator. Equivalent to a&&b || !a&&!b. - For example, windows<->sfbay could be thought of as "if run on a Windows slave, - that slave must be in the SF bay area, but if not on Windows, it must not be in the bay area." -
    -
    -

    - All operators are left-associative (i.e., a->b->c <-> (a->b)->c ) - An expression can contain whitespace for better readability, and it'll be ignored. +

    Notes

    +
      +
    • + All operators are left-associative, i.e. a -> b -> c is + equivalent to (a -> b) -> c. +
    • +
    • + Labels or agent names can be surrounded with quotation marks if they + contain characters that would conflict with the operator syntax.
      + For example, "osx (10.11)" || "Windows Server". +
    • +
    • + Expressions can be written without whitespace, but including it is + recommended for readability; Jenkins will ignore whitespace when + evaluating expressions. +
    • +
    • + Matching labels or agent names with wildcards or regular expressions is + not supported. +
    • +
    • + An empty expression will always evaluate to true, matching all + agents. +
    • +
    -

    - Label names or slave names can be quoted if they contain unsafe characters. For example, - "jenkins-solaris (Solaris)" || "Windows 2008" +

    Examples

    +
    +
    master
    +
    Builds of this project may be executed only on the Jenkins master
    + +
    linux-machine-42
    +
    + Builds of this project may be executed only on the agent with the name + linux-machine-42 (or on any machine that happens to have a label + called linux-machine-42) +
    + +
    windows && jdk9
    +
    + Builds of this project may be executed only on any Windows agent that has + version 9 of the Java Development Kit installed (assuming that agents + with JDK 9 installed have been given a jdk9 label) +
    + +
    postgres && !vm && (linux || freebsd)
    +
    + Builds of this project may be executed only any on Linux or FreeBSD agent, + so long as they are not a virtual machine, and they have PostgreSQL + installed (assuming that each agent has the appropriate labels — in + particular, each agent running in a virtual machine must have the + vm label in order for this example to work as expected) +
    + +
    diff --git a/core/src/main/resources/hudson/model/AbstractProject/help-label_zh_TW.html b/core/src/main/resources/hudson/model/AbstractProject/help-label_zh_TW.html deleted file mode 100644 index 22b9144733..0000000000 --- a/core/src/main/resources/hudson/model/AbstractProject/help-label_zh_TW.html +++ /dev/null @@ -1,50 +0,0 @@ -
    - 如果您想只在特定的節點或 Slave 上建置這個專案,請直接輸入該節點的名稱。 - 在節點不多時這樣子就很好用了。 - -

    - 如果叢集越來越大,那最好不要將專案限定到某一台 Slave 上,因為 Slave 可能會來來去去,進而影響到資源利用率。 - 這種情況下,建議在 Slave 上面設定標籤,依照能力及特性分類,並設定標籤的布林表示式來決定要執行的節點。 - -

    有效的運算符號

    -

    - 支援下面這些運算符號,依照優先順序高到低排列。 -

    -
    (expr)
    -
    括號
    - -
    !expr
    -
    非
    - -
    expr&&expr
    -
    - 且 -
    - -
    expr||expr
    -
    - 或 -
    - -
    a -> b
    -
    - 「蘊涵」運算符號 (若 a 則 b)。等價於 !a|b。 - 舉例來說,windows->x64 可以想成是「如果在 Windows Slave 上執行,一定要 64 位元的環境」。 - Jenkins 還是可以在 Linux 主機上面建置這個專案。 -
    - -
    a <-> b
    -
    - 「若且唯若」運算符號。等價於 a&&b || !a&&!b。 - 舉例來說,windows<->taipei 可以想成是「如果在 Windows Slave 上執行,該節點一定要在臺北; - 不過要是不在 Windows 上執行,就一定不能在臺北」。 -
    -
    -

    - 所有運算符號都是由左向右算的 (Left-Associative; 例如 a->b->c <-> (a->b)->c ) - 為了方便閱讀,表示式裡可以用半形空白,運算時會被忽略。 - -

    - 標籤名稱或 Slave 名稱中如果有不安全的字元,可以用半形括號括起來。例如: - "jenkins-solaris (Solaris)" || "Windows 2008" -

    diff --git a/core/src/main/resources/hudson/model/AllView/noJob.jelly b/core/src/main/resources/hudson/model/AllView/noJob.jelly index 5a74697978..0c9e0c26a9 100644 --- a/core/src/main/resources/hudson/model/AllView/noJob.jelly +++ b/core/src/main/resources/hudson/model/AllView/noJob.jelly @@ -32,7 +32,7 @@ THE SOFTWARE. - +
    ${%newJob}
    diff --git a/core/src/main/resources/hudson/model/Computer/_script.jelly b/core/src/main/resources/hudson/model/Computer/_script.jelly index bcb7e1645f..87fa923070 100644 --- a/core/src/main/resources/hudson/model/Computer/_script.jelly +++ b/core/src/main/resources/hudson/model/Computer/_script.jelly @@ -31,7 +31,7 @@ THE SOFTWARE.
    println System.getenv("PATH")
    println "uname -a".execute().text

    - ${%This execution happens in the slave agent JVM.} + ${%This execution happens in the agent JVM.}

    diff --git a/core/src/main/resources/hudson/model/Computer/_script_da.properties b/core/src/main/resources/hudson/model/Computer/_script_da.properties deleted file mode 100644 index 8bc4318049..0000000000 --- a/core/src/main/resources/hudson/model/Computer/_script_da.properties +++ /dev/null @@ -1,23 +0,0 @@ -# The MIT License -# -# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -This\ execution\ happens\ in\ the\ slave\ agent\ JVM.=Denne eksekvering sker i slave agentens JVM. diff --git a/core/src/main/resources/hudson/model/Computer/_script_de.properties b/core/src/main/resources/hudson/model/Computer/_script_de.properties deleted file mode 100644 index 1d42d76034..0000000000 --- a/core/src/main/resources/hudson/model/Computer/_script_de.properties +++ /dev/null @@ -1,2 +0,0 @@ -This\ execution\ happens\ in\ the\ slave\ agent\ JVM.=\ - Diese Ausführung findet in der JVM des Slave-Agenten statt. diff --git a/core/src/main/resources/hudson/model/Computer/_script_es.properties b/core/src/main/resources/hudson/model/Computer/_script_es.properties index acc45963cf..3c7710374d 100644 --- a/core/src/main/resources/hudson/model/Computer/_script_es.properties +++ b/core/src/main/resources/hudson/model/Computer/_script_es.properties @@ -20,4 +20,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -This\ execution\ happens\ in\ the\ slave\ agent\ JVM.=Esta ejecución se hace en el agente de la máquina virtual del esclavo. +This\ execution\ happens\ in\ the\ agent\ JVM.=Esta ejecución se hace en la máquina virtual (JVM) del agente. diff --git a/core/src/main/resources/hudson/model/Computer/_script_fr.properties b/core/src/main/resources/hudson/model/Computer/_script_fr.properties deleted file mode 100644 index 78ac8fcafc..0000000000 --- a/core/src/main/resources/hudson/model/Computer/_script_fr.properties +++ /dev/null @@ -1,23 +0,0 @@ -# The MIT License -# -# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -This\ execution\ happens\ in\ the\ slave\ agent\ JVM.=Cette exécution a lieu sur la JVM de l''agent Jenkins sur l''esclave. diff --git a/core/src/main/resources/hudson/model/Computer/_script_ja.properties b/core/src/main/resources/hudson/model/Computer/_script_ja.properties deleted file mode 100644 index ce17ad737a..0000000000 --- a/core/src/main/resources/hudson/model/Computer/_script_ja.properties +++ /dev/null @@ -1,24 +0,0 @@ -# The MIT License -# -# Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi, Seiji Sogabe -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -This\ execution\ happens\ in\ the\ slave\ agent\ JVM.=\ - \u30B9\u30EC\u30FC\u30D6\u306EJVM\u3067\u5B9F\u884C\u3055\u308C\u307E\u3057\u305F\u3002 diff --git a/core/src/main/resources/hudson/model/Computer/_script_ru.properties b/core/src/main/resources/hudson/model/Computer/_script_ru.properties deleted file mode 100644 index 04f38657ea..0000000000 --- a/core/src/main/resources/hudson/model/Computer/_script_ru.properties +++ /dev/null @@ -1,3 +0,0 @@ -# This file is under the MIT License by authors - -This\ execution\ happens\ in\ the\ slave\ agent\ JVM.=\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u0432 JVM \u043f\u043e\u0434\u0447\u0438\u043d\u0451\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 diff --git a/core/src/main/resources/hudson/model/Computer/_script_sv_SE.properties b/core/src/main/resources/hudson/model/Computer/_script_sv_SE.properties deleted file mode 100644 index e1d01dd5a8..0000000000 --- a/core/src/main/resources/hudson/model/Computer/_script_sv_SE.properties +++ /dev/null @@ -1,23 +0,0 @@ -# The MIT License -# -# Copyright (c) 2004-2010, Sun Microsystems, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -This\ execution\ happens\ in\ the\ slave\ agent\ JVM.=Detta utf\u00F6rs p\u00E5 nodens JVM. diff --git a/core/src/main/resources/hudson/model/Computer/_script_tr.properties b/core/src/main/resources/hudson/model/Computer/_script_tr.properties deleted file mode 100644 index 710d98527e..0000000000 --- a/core/src/main/resources/hudson/model/Computer/_script_tr.properties +++ /dev/null @@ -1,23 +0,0 @@ -# The MIT License -# -# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Oguz Dag -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -This\ execution\ happens\ in\ the\ slave\ agent\ JVM.=Bu \u00e7al\u0131\u015fma slave ajan\u0131n\u0131n JVM''i \u00fczerinde yap\u0131lmaktad\u0131r. diff --git a/core/src/main/resources/hudson/model/Computer/_script_zh_TW.properties b/core/src/main/resources/hudson/model/Computer/_script_zh_TW.properties deleted file mode 100644 index e7d191f786..0000000000 --- a/core/src/main/resources/hudson/model/Computer/_script_zh_TW.properties +++ /dev/null @@ -1,23 +0,0 @@ -# The MIT License -# -# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -This\ execution\ happens\ in\ the\ slave\ agent\ JVM.=\u5728 Slave \u4ee3\u7406\u7a0b\u5f0f\u7684 JVM \u4e2d\u57f7\u884c\u3002 diff --git a/core/src/main/resources/hudson/model/Computer/custom-jnlp.jelly b/core/src/main/resources/hudson/model/Computer/custom-jnlp.jelly index df19f8cd2c..6f6cbfb2f3 100644 --- a/core/src/main/resources/hudson/model/Computer/custom-jnlp.jelly +++ b/core/src/main/resources/hudson/model/Computer/custom-jnlp.jelly @@ -29,7 +29,7 @@ THE SOFTWARE.

    Tweak Launch Parameters

    - This page allows you to tweak the JVM parameters when launching JNLP slave agents. + This page allows you to tweak the JVM parameters when launching JNLP agents.

    diff --git a/core/src/main/resources/hudson/model/Computer/delete.jelly b/core/src/main/resources/hudson/model/Computer/delete.jelly index 2ae6fea176..2f88351c6a 100644 --- a/core/src/main/resources/hudson/model/Computer/delete.jelly +++ b/core/src/main/resources/hudson/model/Computer/delete.jelly @@ -28,7 +28,7 @@ THE SOFTWARE.
    - ${%Are you sure about deleting the slave?} + ${%Are you sure about deleting the agent?}
    diff --git a/core/src/main/resources/hudson/model/Computer/delete_da.properties b/core/src/main/resources/hudson/model/Computer/delete_da.properties index 41b74dfc8e..1d3dcce7bd 100644 --- a/core/src/main/resources/hudson/model/Computer/delete_da.properties +++ b/core/src/main/resources/hudson/model/Computer/delete_da.properties @@ -21,4 +21,3 @@ # THE SOFTWARE. Yes=Ja -Are\ you\ sure\ about\ deleting\ the\ slave?=Er du sikker p\u00e5 at du vil slette slaven? diff --git a/core/src/main/resources/hudson/model/Computer/delete_de.properties b/core/src/main/resources/hudson/model/Computer/delete_de.properties index 4e7fdd0036..2593097cb4 100644 --- a/core/src/main/resources/hudson/model/Computer/delete_de.properties +++ b/core/src/main/resources/hudson/model/Computer/delete_de.properties @@ -1,2 +1 @@ -Are\ you\ sure\ about\ deleting\ the\ slave?=Möchten Sie den Slave-Knoten wirklich löschen? Yes=Ja diff --git a/core/src/main/resources/hudson/model/Computer/delete_es.properties b/core/src/main/resources/hudson/model/Computer/delete_es.properties index 986f8ac888..2bfd1f95b0 100644 --- a/core/src/main/resources/hudson/model/Computer/delete_es.properties +++ b/core/src/main/resources/hudson/model/Computer/delete_es.properties @@ -20,5 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Are\ you\ sure\ about\ deleting\ the\ slave?=¿Estás seguro de querer borrar este esclavo? +Are\ you\ sure\ about\ deleting\ the\ agent?=¿Estás seguro de querer borrar este agente? Yes=Sí diff --git a/core/src/main/resources/hudson/model/Computer/delete_fr.properties b/core/src/main/resources/hudson/model/Computer/delete_fr.properties index f939cafb6a..50339e156c 100644 --- a/core/src/main/resources/hudson/model/Computer/delete_fr.properties +++ b/core/src/main/resources/hudson/model/Computer/delete_fr.properties @@ -20,5 +20,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Are\ you\ sure\ about\ deleting\ the\ slave?=Etes-vous sûr de vouloir supprimer cet esclave? Yes=Oui diff --git a/core/src/main/resources/hudson/model/Computer/delete_ja.properties b/core/src/main/resources/hudson/model/Computer/delete_ja.properties index 9eb4b9e52f..22f770e0f0 100644 --- a/core/src/main/resources/hudson/model/Computer/delete_ja.properties +++ b/core/src/main/resources/hudson/model/Computer/delete_ja.properties @@ -20,5 +20,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Yes=\u306F\u3044 -Are\ you\ sure\ about\ deleting\ the\ slave?=\u30B9\u30EC\u30FC\u30D6\u3092\u524A\u9664\u3057\u3066\u3088\u308D\u3057\u3044\u3067\u3059\u304B? \ No newline at end of file +Yes=\u306F\u3044 \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Computer/delete_pt_BR.properties b/core/src/main/resources/hudson/model/Computer/delete_pt_BR.properties index d3a3105c4a..60797521ae 100644 --- a/core/src/main/resources/hudson/model/Computer/delete_pt_BR.properties +++ b/core/src/main/resources/hudson/model/Computer/delete_pt_BR.properties @@ -21,4 +21,3 @@ # THE SOFTWARE. Yes=Sim -Are\ you\ sure\ about\ deleting\ the\ slave?=Tem certeza que deseja remover esse slave? diff --git a/core/src/main/resources/hudson/model/Computer/delete_ru.properties b/core/src/main/resources/hudson/model/Computer/delete_ru.properties index 7259f6d977..b7b2dfd7e2 100644 --- a/core/src/main/resources/hudson/model/Computer/delete_ru.properties +++ b/core/src/main/resources/hudson/model/Computer/delete_ru.properties @@ -20,5 +20,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Are\ you\ sure\ about\ deleting\ the\ slave?=\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u043E\u0434\u0447\u0438\u043D\u0435\u043D\u043D\u044B\u0439 \u0443\u0437\u0435\u043B? Yes=\u0414\u0430 diff --git a/core/src/main/resources/hudson/model/Computer/delete_zh_TW.properties b/core/src/main/resources/hudson/model/Computer/delete_zh_TW.properties index caa065d636..83db3cdbc3 100644 --- a/core/src/main/resources/hudson/model/Computer/delete_zh_TW.properties +++ b/core/src/main/resources/hudson/model/Computer/delete_zh_TW.properties @@ -20,5 +20,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Are\ you\ sure\ about\ deleting\ the\ slave?=\u78ba\u5b9a\u8981\u522a\u9664 Slave? Yes=\u662f diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel.jelly b/core/src/main/resources/hudson/model/Computer/sidepanel.jelly index 2a74c154e7..d3c30c47a1 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel.jelly +++ b/core/src/main/resources/hudson/model/Computer/sidepanel.jelly @@ -32,7 +32,7 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_bg.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_bg.properties index d7d2c90921..636f438c66 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_bg.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_bg.properties @@ -23,7 +23,6 @@ Back\ to\ List=\u041E\u0431\u0440\u0430\u0442\u043D\u043E \u043A\u044A\u043C \u0441\u043F\u0438\u0441\u044A\u043A\u0430 Build\ History=\u0418\u0441\u0442\u043E\u0440\u0438\u044F \u043D\u0430 \u0431\u0438\u043B\u0434\u0430 Configure=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 -Delete\ Slave=\u0418\u0437\u0442\u0440\u0438\u0439 \u043C\u0430\u0448\u0438\u043D\u0430 Load\ Statistics=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430 \u043D\u0430 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043D\u0438\u044F\u0442\u0430 Script\ Console=\u041A\u043E\u043D\u0437\u043E\u043B\u0430 Status=\u0421\u0442\u0430\u0442\u0443\u0441 diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_cs.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_cs.properties index 4facbaf734..c4bb2a911c 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_cs.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_cs.properties @@ -23,7 +23,6 @@ Back\ to\ List=Zp\u011Bt na seznam Build\ History=Historie sestaven\u00ED Configure=Nastavit -Delete\ Slave=Vymazat server Load\ Statistics=Na\u010D\u00EDst statistiku Script\ Console=Konzole Status=Stav diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_da.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_da.properties index 62d0db6dbf..44c72e343a 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_da.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_da.properties @@ -22,7 +22,6 @@ Configure=Konfigurer Status=Status -Delete\ Slave=Slet slave Build\ History=Byggehistorik Load\ Statistics=Belastningsstatistik Back\ to\ List=Tilbage til liste diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_de.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_de.properties index 2fa34e5fa0..b927f03b5a 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_de.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_de.properties @@ -24,6 +24,5 @@ Back\ to\ List=Zur Build\ History=Build-Verlauf Script\ Console=Script-Konsole Status=Status -Delete\ Slave=Slave löschen Configure=Konfigurieren Load\ Statistics=Auslastung diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_eo.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_eo.properties deleted file mode 100644 index 0c86aa471d..0000000000 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_eo.properties +++ /dev/null @@ -1,3 +0,0 @@ -# This file is under the MIT License by authors - -Delete\ Slave=Nuligi sklavon diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_es.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_es.properties index d8b9a2d6d9..c96d7bb82d 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_es.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_es.properties @@ -22,7 +22,7 @@ Back\ to\ List=Volver Status=Estado -Delete\ Slave=Borrar esclavo +Delete\ Agent=Borrar agente Configure=Configurar Build\ History=Historia de ejecuciones Load\ Statistics=Cargar estadísticas diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_fi.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_fi.properties index f3fb8825cc..9049275c32 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_fi.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_fi.properties @@ -23,7 +23,6 @@ Back\ to\ List=Takaisin listaan Build\ History=K\u00E4\u00E4nn\u00F6shistoria Configure=Konfiguroi -Delete\ Slave=Poista suorittaja Load\ Statistics=Kuormatilastot Script\ Console=Skriptikonsoli Status=Tila diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_fr.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_fr.properties index 3c7a539c24..63d8626ee3 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_fr.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_fr.properties @@ -24,7 +24,6 @@ Back\ to\ List=Retour Build\ History=Historique des constructions Script\ Console=Console de script Status=Statut -Delete\ Slave=Supprimer l\u2019esclave Configure=Configurer Load\ Statistics=Statistiques d\u2019utilisation diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_he.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_he.properties index 17436729ee..992f7a1f66 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_he.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_he.properties @@ -23,7 +23,6 @@ Back\ to\ List=\u05D7\u05D6\u05E8\u05D4 \u05DC\u05E8\u05E9\u05D9\u05DE\u05D4 Build\ History=\u05D4\u05D9\u05E1\u05D8\u05D5\u05E8\u05D9\u05D9\u05EA \u05D1\u05E0\u05D9\u05D5\u05EA Configure=\u05E7\u05D1\u05D9\u05E2\u05EA \u05EA\u05E6\u05D5\u05E8\u05D4 -Delete\ Slave=\u05DE\u05D7\u05D9\u05E7\u05EA \u05EA\u05D7\u05E0\u05D4 Load\ Statistics=\u05E1\u05D8\u05D8\u05D9\u05E1\u05D8\u05D9\u05E7\u05D5\u05EA \u05D4\u05E2\u05D5\u05DE\u05E1 Script\ Console=\u05DE\u05E1\u05D5\u05E3 \u05D4\u05E1\u05E7\u05E8\u05D9\u05E4\u05D8\u05D9\u05DD Status=\u05E1\u05D8\u05D8\u05D5\u05E1 diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_it.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_it.properties index 62bd6909dc..3e3dab4a43 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_it.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_it.properties @@ -3,6 +3,5 @@ Back\ to\ List=Torna alla Lista Build\ History=Storia dei Build Configure=Configura -Delete\ Slave=Cancella Slave Load\ Statistics=Carica Statistiche Status=Stato diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_ja.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_ja.properties index 7ab2d427d6..ed49c9c3b9 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_ja.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_ja.properties @@ -22,7 +22,6 @@ Back\ to\ List=\u30EA\u30B9\u30C8\u3078\u623B\u308B Status=\u72B6\u614B -Delete\ Slave=\u30B9\u30EC\u30FC\u30D6\u524A\u9664 Configure=\u8A2D\u5B9A Build\ History=\u30D3\u30EB\u30C9\u5C65\u6B74 Load\ Statistics=\u8CA0\u8377\u7D71\u8A08 diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_ko.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_ko.properties index 23a3838f62..5c29487638 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_ko.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_ko.properties @@ -23,7 +23,6 @@ Back\ to\ List=\uBAA9\uB85D\uC73C\uB85C \uB3CC\uC544\uAC00\uAE30 Build\ History=\uBE4C\uB4DC \uAE30\uB85D Configure=\uC124\uC815 -Delete\ Slave=Slave \uC0AD\uC81C Load\ Statistics=\uD1B5\uACC4\uBCF4\uAE30 Script\ Console=\uC2A4\uD06C\uB9BD\uD2B8 \uCF58\uC194 Status=\uC0C1\uD0DC diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_lt.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_lt.properties index d06880df35..10e449ee00 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_lt.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_lt.properties @@ -23,6 +23,5 @@ Back\ to\ List=Atgal \u012F s\u0105ra\u0161\u0105 Build\ History=Darb\u0173 istorija Configure=Nustatymai -Delete\ Slave=I\u0161trinti ''Slave'' Load\ Statistics=Kr\u016Bvio statistika Status=B\u016Bsena diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_lv.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_lv.properties index 2b1f18e714..8f90d430a6 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_lv.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_lv.properties @@ -23,7 +23,6 @@ Back\ to\ List=Atpaka\u013C pie saraksta Build\ History=B\u016Bv\u0113jumu v\u0113sture Configure=Konfigur\u0113t -Delete\ Slave=Dz\u0113st pak\u0101rtoto izpild\u012Btaju Load\ Statistics=Noslodzes statistika Script\ Console=Skriptu konsole Status=St\u0101voklis diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_nb_NO.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_nb_NO.properties index 0a9fcd4fec..8a56a4ddd5 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_nb_NO.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_nb_NO.properties @@ -23,7 +23,6 @@ Back\ to\ List=Tilbake til listen Build\ History=Bygghistorikk Configure=Konfigur\u00E9r -Delete\ Slave=Slett slave Load\ Statistics=Laststatistikk Script\ Console=Skriptekonsoll Status=Status diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_nl.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_nl.properties index bc7f5949bd..654c2904d9 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_nl.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_nl.properties @@ -23,7 +23,6 @@ Back\ to\ List=Terug naar overzicht Build\ History=Bouwhistorie Configure=Configureren -Delete\ Slave=Verwijderen Load\ Statistics=Belastings statistieken Script\ Console=Scriptconsole Status=Status diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_pl.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_pl.properties index bd34753cda..2ddc6acd17 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_pl.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_pl.properties @@ -23,6 +23,5 @@ Back\ to\ List=Powr\u00F3t do listy Build\ History=Historia kompilacji Configure=Konfiguruj -Delete\ Slave=Usu\u0144 Slave Load\ Statistics=Statystyka obci\u0105\u017Cenia Script\ Console=Konsola skrypt\u00F3w diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_pt_BR.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_pt_BR.properties index b91be21c9d..20731bae6a 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_pt_BR.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_pt_BR.properties @@ -24,6 +24,5 @@ Back\ to\ List=Voltar para a lista Build\ History=Hist\u00f3rico de builds Configure=Configurar Status=Situa\u00e7\u00e3o -Delete\ Slave=Remover slave Load\ Statistics=Estat\u00edsticas de carga Script\ Console=Terminal de script diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_pt_PT.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_pt_PT.properties index 677b381cb6..7581da9c23 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_pt_PT.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_pt_PT.properties @@ -3,6 +3,5 @@ Back\ to\ List=Voltar para a Lista Build\ History=Hist\u00F3rico de Compila\u00E7\u00F5es Configure=Configurar -Delete\ Slave=Apagar Escravo Load\ Statistics=Carregar Estat\u00EDsticas Status=Estado diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_ru.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_ru.properties index b8be6235c7..269c911a88 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_ru.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_ru.properties @@ -23,7 +23,6 @@ Back\ to\ List=\u0412\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0441\u043f\u0438\u0441\u043a\u0443 Build\ History=\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u0431\u043e\u0440\u043e\u043a Configure=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c -Delete\ Slave=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b Load\ Statistics=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Script\ Console=\u041a\u043e\u043d\u0441\u043e\u043b\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 Status=\u0421\u0442\u0430\u0442\u0443\u0441 diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_sk.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_sk.properties index e79975c893..3e9548696e 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_sk.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_sk.properties @@ -3,7 +3,6 @@ Back\ to\ List=Nasp\u00E4\u0165 na zoznam Build\ History=Hist\u00F3ria zostaven\u00ED Configure=Konfiguruj -Delete\ Slave=Vyma\u017E stroj Load\ Statistics=\u0160tatistiky vy\u0165a\u017Eenia Script\ Console=Skriptov\u00E1 konzola Status=Stav diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_sv_SE.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_sv_SE.properties index 6d9abb2fd5..c98df81fab 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_sv_SE.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_sv_SE.properties @@ -23,7 +23,6 @@ Back\ to\ List=Tillbaka till nodlista Build\ History=Jobbhistorik Configure=Konfigurera -Delete\ Slave=Ta bort nod Load\ Statistics=Belastningstatistik Script\ Console=Skriptkonsoll Status=Status diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_tr.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_tr.properties index 300309ef65..87af65f9c3 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_tr.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_tr.properties @@ -23,7 +23,6 @@ Back\ to\ List=Listeye D\u00f6n Build\ History=Yap\u0131land\u0131rma Ge\u00e7mi\u015fi Configure=Yap\u0131land\u0131r -Delete\ Slave=Ba\u011F\u0131l\u0131(Slave) sil Load\ Statistics=Y\u00FCklenme istatistikleri Script\ Console=Script\ Konsolu Status=Durum diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_uk.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_uk.properties index c103c89144..8917b1c57c 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_uk.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_uk.properties @@ -3,7 +3,6 @@ Back\ to\ List=\u041F\u043E\u0432\u0435\u0440\u043D\u0443\u0442\u0438\u0441\u044C \u0434\u043E \u0441\u043F\u0438\u0441\u043A\u0443 Build\ History=\u0406\u0441\u0442\u043E\u0440\u0456\u044F \u043F\u043E\u0431\u0443\u0434\u043E\u0432 Configure=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F -Delete\ Slave=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 Slave Load\ Statistics=\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443 Script\ Console=\u0421\u043A\u0440\u0438\u043F\u0442\u043E\u0432\u0430 \u043A\u043E\u043D\u0441\u043E\u043B\u044C Status=\u0421\u0442\u0430\u0442\u0443\u0441 diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_zh_CN.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_zh_CN.properties index 547bb7a6f4..0861540bb9 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_zh_CN.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_zh_CN.properties @@ -23,7 +23,6 @@ Back\ to\ List=\u8fd4\u56de\u5217\u8868 Build\ History=\u6784\u5efa\u5386\u53f2 Configure=\u914D\u7F6E\u4ECE\u8282\u70B9 -Delete\ Slave=\u5220\u9664\u5B50\u8282\u70B9 Load\ Statistics=\u8d1f\u8f7d\u7edf\u8ba1 Script\ Console=\u811a\u672c\u547d\u4ee4\u884c Status=\u72b6\u6001 diff --git a/core/src/main/resources/hudson/model/Computer/sidepanel_zh_TW.properties b/core/src/main/resources/hudson/model/Computer/sidepanel_zh_TW.properties index fdc17d9b14..88ef844bb3 100644 --- a/core/src/main/resources/hudson/model/Computer/sidepanel_zh_TW.properties +++ b/core/src/main/resources/hudson/model/Computer/sidepanel_zh_TW.properties @@ -22,7 +22,6 @@ Back\ to\ List=\u56DE\u5230\u6E05\u55AE Status=\u72C0\u614B -Delete\ Slave=\u522A\u9664 Slave Configure=\u8A2D\u5B9A Build\ History=\u5EFA\u69CB\u6B77\u53F2 Load\ Statistics=\u8CA0\u8F09\u7D71\u8A08 diff --git a/core/src/main/resources/hudson/model/ComputerSet/index.jelly b/core/src/main/resources/hudson/model/ComputerSet/index.jelly index 421865bd2c..22a8f39e34 100644 --- a/core/src/main/resources/hudson/model/ComputerSet/index.jelly +++ b/core/src/main/resources/hudson/model/ComputerSet/index.jelly @@ -68,7 +68,7 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/hudson/model/ComputerSet/new.jelly b/core/src/main/resources/hudson/model/ComputerSet/new.jelly index 8f3b7076de..403cf5d9ff 100644 --- a/core/src/main/resources/hudson/model/ComputerSet/new.jelly +++ b/core/src/main/resources/hudson/model/ComputerSet/new.jelly @@ -23,7 +23,7 @@ THE SOFTWARE. --> - - - + + + +
    ${%LOADING}
    - + @@ -54,7 +55,7 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/hudson/model/Job/configure.properties b/core/src/main/resources/hudson/model/Job/configure.properties index f6f01a21a9..ba7d95bb98 100644 --- a/core/src/main/resources/hudson/model/Job/configure.properties +++ b/core/src/main/resources/hudson/model/Job/configure.properties @@ -20,4 +20,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -name={0} name \ No newline at end of file +name={0} name +Save=Save +Apply=Apply \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Label/sidepanel.jelly b/core/src/main/resources/hudson/model/Label/sidepanel.jelly index 734a5c53dd..7d662a0a45 100644 --- a/core/src/main/resources/hudson/model/Label/sidepanel.jelly +++ b/core/src/main/resources/hudson/model/Label/sidepanel.jelly @@ -34,7 +34,7 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/hudson/model/LoadStatistics/main.properties b/core/src/main/resources/hudson/model/LoadStatistics/main.properties index 9fc34ab657..f8e8787faf 100644 --- a/core/src/main/resources/hudson/model/LoadStatistics/main.properties +++ b/core/src/main/resources/hudson/model/LoadStatistics/main.properties @@ -31,7 +31,7 @@ blurb=\ For a label: this is the sum of all executors across all online computers in this label.
    \ For the entire Jenkins: this is the sum of all executors across all online computers in this Jenkins \ installation.
    \ - Other than configuration changes, this value can also change when slaves go offline. \ + Other than configuration changes, this value can also change when agents go offline. \ \
    Number of busy executors
    \
    \ diff --git a/core/src/main/resources/hudson/model/Messages.properties b/core/src/main/resources/hudson/model/Messages.properties index 571ec8867f..32730a733d 100644 --- a/core/src/main/resources/hudson/model/Messages.properties +++ b/core/src/main/resources/hudson/model/Messages.properties @@ -31,7 +31,7 @@ AbstractBuild.KeptBecause=This build is kept because of {0}. AbstractItem.NoSuchJobExists=No such job \u2018{0}\u2019 exists. Perhaps you meant \u2018{1}\u2019? AbstractItem.NoSuchJobExistsWithoutSuggestion=No such job \u2018{0}\u2019 exists. AbstractItem.Pronoun=Item -AbstractProject.AssignedLabelString_NoMatch_DidYouMean=There\u2019s no slave/cloud that matches this assignment. Did you mean \u2018{1}\u2019 instead of \u2018{0}\u2019? +AbstractProject.AssignedLabelString_NoMatch_DidYouMean=There\u2019s no agent/cloud that matches this assignment. Did you mean \u2018{1}\u2019 instead of \u2018{0}\u2019? AbstractProject.NewBuildForWorkspace=Scheduling a new build to get a workspace. AbstractProject.AwaitingBuildForWorkspace=Awaiting build to get a workspace. AbstractProject.AwaitingWorkspaceToComeOnline=We need to schedule a new build to get a workspace, but deferring {0}ms in the hope that one will become available soon @@ -72,7 +72,7 @@ AbstractProject.CancelPermission.Description=\ AbstractProject.AssignedLabelString.InvalidBooleanExpression=\ Invalid boolean expression: {0} AbstractProject.AssignedLabelString.NoMatch=\ - There's no slave/cloud that matches this assignment + There's no agent/cloud that matches this assignment AbstractProject.CustomWorkspaceEmpty=Custom workspace is empty. AbstractProject.LabelLink=Label is serviced by {2,choice,0#no nodes|1#1 node|1<{2} nodes}{3,choice,0#|1# and 1 cloud|1< and {3} clouds} @@ -99,21 +99,21 @@ CLI.offline-node.shortDescription=Stop using a node for performing builds tempor CLI.wait-node-online.shortDescription=Wait for a node to become online. CLI.wait-node-offline.shortDescription=Wait for a node to become offline. -Computer.Caption=Slave {0} -Computer.NoSuchSlaveExists=No such slave "{0}" exists. Did you mean "{1}"? -Computer.Permissions.Title=Slave -Computer.ExtendedReadPermission.Description=This permission allows users to read slave configuration. -Computer.ConfigurePermission.Description=This permission allows users to configure slaves. -Computer.DeletePermission.Description=This permission allows users to delete existing slaves. -Computer.CreatePermission.Description=This permission allows users to create slaves. -Computer.ConnectPermission.Description=This permission allows users to connect slaves or mark slaves as online. -Computer.DisconnectPermission.Description=This permission allows users to disconnect slaves or mark slaves as temporarily offline. -Computer.BuildPermission.Description=This permission allows users to run jobs as them on slaves. -Computer.BadChannel=Slave node offline or not a remote channel (such as master node). +Computer.Caption=Agent {0} +Computer.NoSuchSlaveExists=No such agent "{0}" exists. Did you mean "{1}"? +Computer.Permissions.Title=Agent +Computer.ExtendedReadPermission.Description=This permission allows users to read agent configuration. +Computer.ConfigurePermission.Description=This permission allows users to configure agents. +Computer.DeletePermission.Description=This permission allows users to delete existing agents. +Computer.CreatePermission.Description=This permission allows users to create agents. +Computer.ConnectPermission.Description=This permission allows users to connect agents or mark agents as online. +Computer.DisconnectPermission.Description=This permission allows users to disconnect agents or mark agents as temporarily offline. +Computer.BuildPermission.Description=This permission allows users to run jobs as them on agents. +Computer.BadChannel=Agent node offline or not a remote channel (such as master node). -ComputerSet.NoSuchSlave=No such slave: {0} -ComputerSet.SlaveAlreadyExists=Slave called \u2018{0}\u2019 already exists -ComputerSet.SpecifySlaveToCopy=Specify which slave to copy +ComputerSet.NoSuchSlave=No such agent: {0} +ComputerSet.SlaveAlreadyExists=Agent called \u2018{0}\u2019 already exists +ComputerSet.SpecifySlaveToCopy=Specify which agent to copy ComputerSet.DisplayName=Nodes Descriptor.From=(from {0}) @@ -121,6 +121,9 @@ Descriptor.From=(from {0}) Executor.NotAvailable=N/A FreeStyleProject.DisplayName=Freestyle project +FreeStyleProject.Description=\ + This is the central feature of Jenkins. Jenkins will build your project, combining any SCM with any build system, \ + and this can be even used for something other than software build. HealthReport.EmptyString= @@ -232,19 +235,19 @@ Run.Summary.BrokenSinceThisBuild=broken since this build Run.Summary.BrokenSince=broken since build {0} Run.Summary.Unknown=? -Slave.InvalidConfig.Executors=Invalid slave configuration for {0}. Invalid # of executors. -Slave.InvalidConfig.NoName=Invalid slave configuration. Name is empty -Slave.InvalidConfig.NoRemoteDir=Invalid slave configuration for {0}. No remote directory given -Slave.Launching={0} Launching slave agent +Slave.InvalidConfig.Executors=Invalid agent configuration for {0}. Invalid # of executors. +Slave.InvalidConfig.NoName=Invalid agent configuration. Name is empty +Slave.InvalidConfig.NoRemoteDir=Invalid agent configuration for {0}. No remote directory given +Slave.Launching={0} Launching agent Slave.Network.Mounted.File.System.Warning=Are you sure you want to use network mounted file system for FS root? Note that this directory does not need to be visible to the master. Slave.Remote.Director.Mandatory=Remote directory is mandatory -Slave.Terminated={0} slave agent was terminated +Slave.Terminated={0} agent was terminated Slave.Remote.Relative.Path.Warning=Are you sure you want to use a relative path for the FS root? Note that relative \ paths require that you can assure that the selected launcher provides a consistent current working directory. Using \ an absolute path is highly recommended. -Slave.UnableToLaunch=Unable to launch the slave agent for {0}{1} -Slave.UnixSlave=This is a Unix slave -Slave.WindowsSlave=This is a Windows slave +Slave.UnableToLaunch=Unable to launch the agent for {0}{1} +Slave.UnixSlave=This is a Unix agent +Slave.WindowsSlave=This is a Windows agent TopLevelItemDescriptor.NotApplicableIn={0} items are not applicable within {1} @@ -300,7 +303,7 @@ UpdateCenter.PluginCategory.scala=Scala Development UpdateCenter.PluginCategory.scm=Source Code Management UpdateCenter.PluginCategory.scm-related=Source Code Management related UpdateCenter.PluginCategory.security=Security -UpdateCenter.PluginCategory.slaves=Slave Launchers and Controllers +UpdateCenter.PluginCategory.slaves=Agent Launchers and Controllers UpdateCenter.PluginCategory.test=Testing UpdateCenter.PluginCategory.trigger=Build Triggers UpdateCenter.PluginCategory.ui=User Interface @@ -319,9 +322,9 @@ Permalink.LastFailedBuild=Last failed build Permalink.LastCompletedBuild=Last completed build ParameterAction.DisplayName=Parameters -ParametersDefinitionProperty.DisplayName=This build is parameterized +ParametersDefinitionProperty.DisplayName=This project is parameterized StringParameterDefinition.DisplayName=String Parameter -TextParameterDefinition.DisplayName=Text Parameter +TextParameterDefinition.DisplayName=Multi-line String Parameter FileParameterDefinition.DisplayName=File Parameter BooleanParameterDefinition.DisplayName=Boolean Parameter ChoiceParameterDefinition.DisplayName=Choice Parameter @@ -333,8 +336,8 @@ Node.BecauseNodeIsReserved={0} is reserved for jobs with matching label expressi Node.BecauseNodeIsNotAcceptingTasks={0} is not accepting tasks Node.LabelMissing={0} doesn\u2019t have label {1} Node.LackingBuildPermission={0} doesn\u2019t have a permission to run on {1} -Node.Mode.NORMAL=Utilize this node as much as possible -Node.Mode.EXCLUSIVE=Only build jobs with label restrictions matching this node +Node.Mode.NORMAL=Use this node as much as possible +Node.Mode.EXCLUSIVE=Only build jobs with label expressions matching this node ListView.DisplayName=List View diff --git a/core/src/main/resources/hudson/model/Messages_ar.properties b/core/src/main/resources/hudson/model/Messages_ar.properties new file mode 100644 index 0000000000..6ff7b6edcf --- /dev/null +++ b/core/src/main/resources/hudson/model/Messages_ar.properties @@ -0,0 +1 @@ +FreeStyleProject.Description=\u0647\u0630\u0647 \u0647\u064A \u0627\u0644\u0645\u064A\u0632\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629 \u0641\u064A \u062C\u0646\u0643\u0646\u0632. \u062C\u0646\u0643\u0646\u0632 \u0633\u064A\u0628\u0646\u064A \u0644\u0643 \u0645\u0634\u0631\u0648\u0639\u0643\u060C \u064A\u0633\u062A\u062E\u062F\u0645 \u0623\u062F\u0648\u0627\u062A \u0645\u0631\u0627\u0642\u0628\u0629 \u0627\u0644\u0645\u0635\u062F\u0631 \u0627\u0644\u0628\u0631\u0645\u062C\u064A\u060C \u0648\u064A\u0645\u0643\u0646 \u062D\u062A\u0649 \u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u0627 \uFEF7\u0634\u064A\u0627\u0621 \u063A\u064A\u0631 \u0628\u0646\u0627\u0621 \u0627\u0644\u0645\u0634\u0631\u0648\u0639. \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Messages_bg.properties b/core/src/main/resources/hudson/model/Messages_bg.properties index fad7cc6409..7bfa610ffd 100644 --- a/core/src/main/resources/hudson/model/Messages_bg.properties +++ b/core/src/main/resources/hudson/model/Messages_bg.properties @@ -37,8 +37,6 @@ AbstractItem.NoSuchJobExistsWithoutSuggestion=\ \u041d\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430 \u0438\u043c\u0435 \u201e{0}\u201c. AbstractItem.Pronoun=\ \u0415\u043b\u0435\u043c\u0435\u043d\u0442 -AbstractProject.AssignedLabelString_NoMatch_DidYouMean=\ - \u041d\u0438\u043a\u043e\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u043e\u0442\u0433\u043e\u0432\u0430\u0440\u044f \u0437\u0430 \u0442\u0430\u0437\u0438 \u0437\u0430\u0434\u0430\u0447\u0430. \u0414\u0430 \u043d\u044f\u043c\u0430\u0442\u0435 \u043f\u0440\u0435\u0434\u0432\u0438\u0434 \u201e{1}\u201c \u0432\u043c\u0435\u0441\u0442\u043e \u201e{0}\u201c? AbstractProject.NewBuildForWorkspace=\ \u041d\u0430\u0441\u0440\u043e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435, \u0437\u0430 \u0434\u0430 \u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0438 \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. AbstractProject.AwaitingBuildForWorkspace=\ @@ -105,8 +103,6 @@ AbstractProject.CancelPermission.Description=\ \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u043e\u0442\u043c\u044f\u043d\u0430 \u043d\u0430 \u0437\u0430\u043f\u043b\u0430\u043d\u0443\u0432\u0430\u043d\u043e \u0438 \u0441\u043f\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430\u043d\u043e \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435. AbstractProject.AssignedLabelString.InvalidBooleanExpression=\ \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u0431\u0443\u043b\u0435\u0432 \u0438\u0437\u0440\u0430\u0437: {0} -AbstractProject.AssignedLabelString.NoMatch=\ - \u041d\u0438\u043a\u043e\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0438\u043b\u0438 \u043e\u0431\u043b\u0430\u043a \u043d\u0435 \u043e\u0442\u0433\u043e\u0432\u0430\u0440\u044f \u043d\u0430 \u0442\u0430\u0437\u0438 \u0437\u0430\u0434\u0430\u0447\u0430. AbstractProject.CustomWorkspaceEmpty=\ \u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0435 \u043f\u0440\u0430\u0437\u043d\u043e. AbstractProject.LabelLink=\ @@ -164,38 +160,6 @@ CLI.wait-node-online.shortDescription=\ CLI.wait-node-offline.shortDescription=\ \u0418\u0437\u0447\u0430\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0434\u0430 \u043d\u0435 \u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f. -Computer.Caption=\ - \u041a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u201e{0}\u201c -Computer.NoSuchSlaveExists=\ - \u041d\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u201e{0}\u201c. \u201e{1}\u201c \u043b\u0438 \u0438\u043c\u0430\u0442\u0435 \u043f\u0440\u0435\u0434\u0432\u0438\u0434? -Computer.Permissions.Title=\ - \u041f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 -Computer.ExtendedReadPermission.Description=\ - \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f \u0437\u0430 \u0447\u0435\u0442\u0435\u043d\u0435 \u0434\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438. -Computer.ConfigurePermission.Description=\ - \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438. -Computer.DeletePermission.Description=\ - \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u043c\u0430\u0445\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438. -Computer.CreatePermission.Description=\ - \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0434\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438. -Computer.ConnectPermission.Description=\ - \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u0434\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438 \u0438 \u043e\u0431\u044f\u0432\u044f\u0432\u0430\u043d\u0435\u0442\u043e \u0438\u043c, \u0447\u0435 \u0441\u0430 \u043d\u0430\ - \u043b\u0438\u043d\u0438\u044f. -Computer.DisconnectPermission.Description=\ - \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u043c\u0430\u0445\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438 \u0438 \u043e\u0431\u044f\u0432\u044f\u0432\u0430\u043d\u0435\u0442\u043e \u0438\u043c, \u0447\u0435 \u043d\u0435 \u0441\u0430 \u043d\u0430\ - \u043b\u0438\u043d\u0438\u044f. -Computer.BuildPermission.Description=\ - \u0422\u043e\u0432\u0430 \u0434\u0430\u0432\u0430 \u043f\u0440\u0430\u0432\u043e \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438\u0442\u0435 \u0434\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0442 \u0441\u0432\u043e\u0435 \u0438\u043c\u0435 \u043d\u0430\ - \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u044e\u0442\u0440\u0438. -Computer.BadChannel=\ - \u0410\u043a\u043e \u0442\u043e\u0432\u0430 \u0435 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440, \u0442\u043e\u0439 \u043d\u0435 \u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f. - -ComputerSet.NoSuchSlave=\ - \u041d\u044f\u043c\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u043d\u0430 \u0438\u043c\u0435 \u201e{0}\u201c. -ComputerSet.SlaveAlreadyExists=\ - \u0412\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u043d\u0430 \u0438\u043c\u0435 \u201e{0}\u201c. -ComputerSet.SpecifySlaveToCopy=\ - \u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u0437\u0430 \u043a\u043e\u043f\u0438\u0440\u0430\u043d\u0435 ComputerSet.DisplayName=\ \u041a\u043e\u043c\u043f\u044e\u0442\u0440\u0438 @@ -207,6 +171,8 @@ Executor.NotAvailable=\ FreeStyleProject.DisplayName=\ \u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 +FreeStyleProject.Description=\ + \u0422\u043E\u0432\u0430 \u0435 \u043E\u0441\u043D\u043E\u0432\u043D\u0430 \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u043D\u043E\u0441\u0442 \u0432 Jenkins. Jenkins \u043C\u043E\u0436\u0435 \u0434\u0430 \u0431\u0438\u043B\u0434\u043D\u0435 \u0432\u0430\u0448 \u043F\u0440\u043E\u0435\u043A\u0442 \u043A\u043E\u043C\u0431\u0438\u043D\u0438\u0440\u0430\u0439\u043A\u0438 \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u043B\u0435\u043D \u0441\u043E\u0440\u0441 \u043A\u043E\u043D\u0442\u0440\u043E\u043B \u0441 \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u043B\u043D\u0430 \u0431\u0438\u043B\u0434 \u0441\u0438\u0441\u0442\u0435\u043C\u0430, \u043A\u0430\u0442\u043E \u043C\u043E\u0436\u0435\u0442\u0435 \u0434\u043E\u0440\u0438 \u0434\u0430 \u0433\u043E \u043F\u043E\u043B\u0437\u0432\u0430\u0442\u0435 \u0438 \u0437\u0430 \u0434\u0440\u0443\u0433\u0438 \u0446\u0435\u043B\u0438 \u0440\u0430\u0437\u043B\u0438\u0447\u043D\u0438 \u043E\u0442 \u0431\u0438\u043B\u0434\u0432\u0430\u043D\u0435 \u043D\u0430 \u0441\u043E\u0444\u0442\u0443\u0435\u0440. HealthReport.EmptyString= @@ -403,33 +369,16 @@ Run.Summary.BrokenSince=\ Run.Summary.Unknown=\ \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e -Slave.InvalidConfig.Executors=\ - \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u201e{0}\u201c \u2014 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u0431\u0440\u043e\u0439 \u043d\u0430\ - \u0438\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u0438\u0442\u0435. -Slave.InvalidConfig.NoName=\ - \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u2014 \u0438\u043c\u0435\u0442\u043e \u0435 \u043f\u0440\u0430\u0437\u043d\u043e. -Slave.InvalidConfig.NoRemoteDir=\ - \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u201e{0}\u201c \u2014 \u043b\u0438\u043f\u0441\u0432\u0430 \u043e\u0442\u0434\u0430\u043b\u0435\u0447\u0435\u043d\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f. -Slave.Launching=\ - {0} \u2014 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441 Slave.Network.Mounted.File.System.Warning=\ \u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0441\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043c\u043e\u043d\u0442\u0438\u0440\u0430\u043d\u0430 \u043f\u043e\ \u043c\u0440\u0435\u0436\u0430\u0442\u0430, \u043a\u0430\u0442\u043e \u043a\u043e\u0440\u0435\u043d\u043e\u0432\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f? \u041d\u044f\u043c\u0430 \u043d\u0443\u0436\u0434\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u0442\u0430 \u0434\u0430 \u0441\u0435 \u0432\u0438\u0436\u0434\u0430 \u043e\u0442\ \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0432\u0430\u0449\u0438\u044f \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440. Slave.Remote.Director.Mandatory=\ \u041e\u0442\u0434\u0430\u043b\u0435\u0447\u0435\u043d\u0430\u0442\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u0430. -Slave.Terminated=\ - {0} \u2014 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u044f\u0442 \u043f\u0440\u043e\u0446\u0435\u0441 \u0431\u0435 \u043f\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u043d Slave.Remote.Relative.Path.Warning=\ \u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0441\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0435\u043d \u043f\u044a\u0442 \u043a\u0430\u0442\u043e \u043a\u043e\u0440\u0435\u043d\u043e\u0432\u0430\ \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f? \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0434\u0430\u043b\u0438 \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u044f\u0442 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0449 \u043f\u0440\u043e\u0446\u0435\u0441 \u043e\u0441\u0438\u0433\u0443\u0440\u044f\u0432\u0430 \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\ \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0430\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u043d\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f. \u041f\u0440\u0435\u043f\u043e\u0440\u044a\u0447\u0438\u0442\u0435\u043b\u043d\u043e \u0435 \u0434\u0430 \u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u0435\u043d \u043f\u044a\u0442. -Slave.UnableToLaunch=\ - \u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441 \u0437\u0430 \u201e{0}{1}\u201c -Slave.UnixSlave=\ - \u041f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u0441 Unix. -Slave.WindowsSlave=\ - \u041f\u043e\u0434\u0447\u0438\u043d\u0435\u043d \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440 \u0441 Windows. TopLevelItemDescriptor.NotApplicableIn=\ {0} \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043d\u0435 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0441\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0430\u0442 \u0432 {1} @@ -525,8 +474,6 @@ UpdateCenter.PluginCategory.scm-related=\ \u041e\u0449\u0435 \u0437\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438\u0442\u0435 UpdateCenter.PluginCategory.security=\ \u0421\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442 -UpdateCenter.PluginCategory.slaves=\ - \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u0438\u0442\u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u0438 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 UpdateCenter.PluginCategory.test=\ \u0422\u0435\u0441\u0442\u0432\u0430\u043d\u0435 UpdateCenter.PluginCategory.trigger=\ diff --git a/core/src/main/resources/hudson/model/Messages_ca.properties b/core/src/main/resources/hudson/model/Messages_ca.properties index 2237bbee1d..0a5f3a512e 100644 --- a/core/src/main/resources/hudson/model/Messages_ca.properties +++ b/core/src/main/resources/hudson/model/Messages_ca.properties @@ -1 +1,3 @@ ManageJenkinsAction.DisplayName=Configuraci\u00F3 de Jenkins + +FreeStyleProject.Description=Aquesta \u00E9s la funcionalitat principal de Jenkins. Jenkins far\u00E0 un build del vostre projecte combinant qualsevol SCM amb qualsevol sistema de build. Aix\u00F2 tamb\u00E9 es pot usar per tasques que no siguin un build de software diff --git a/core/src/main/resources/hudson/model/Messages_cs.properties b/core/src/main/resources/hudson/model/Messages_cs.properties index c294dbd242..11de8e6c7a 100644 --- a/core/src/main/resources/hudson/model/Messages_cs.properties +++ b/core/src/main/resources/hudson/model/Messages_cs.properties @@ -1 +1,3 @@ ManageJenkinsAction.DisplayName=Administrace + +FreeStyleProject.Description=Toto je hlavn\u00ED funkce Jenkins. Jenkins sestav\u00ED v\u00E1\u0161 projekt, spoj\u00ED jak\u00FDkoli syst\u00E9m pro spr\u00E1vu verz\u00ED se syst\u00E9mem pro sestaven\u00ED. Nemus\u00ED b\u00FDt pou\u017Eit jen pro sestaven\u00ED softwaru. \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Messages_da.properties b/core/src/main/resources/hudson/model/Messages_da.properties index 76378ed018..427ba244f1 100644 --- a/core/src/main/resources/hudson/model/Messages_da.properties +++ b/core/src/main/resources/hudson/model/Messages_da.properties @@ -38,7 +38,6 @@ Denne tilladelse g\u00f8r det muligt for brugeren at opdatere beskrivelsen og an for eksempel for at skrive en besked om hvorfor et byg fejler. StringParameterDefinition.DisplayName=Strengparameter Node.Mode.NORMAL=Benyt denne slave s\u00e5 meget som overhovedet muligt -Computer.Caption=Slave {0} ProxyView.NoSuchViewExists=Global visning {0} findes ikke UpdateCenter.PluginCategory.external=Eksternt site/ v\u00e6rkt\u00f8jsintegration BallColor.Pending=I k\u00f8 @@ -60,18 +59,18 @@ Run.DeletePermission.Description=Denne tilladelse g\u00f8r det muligt for bruger Run.Summary.BrokenForALongTime=fejlet l\u00e6nge CLI.safe-restart.shortDescription=Sikker genstart af Jenkins CLI.quiet-down.shortDescription=Forbereder nedlukning, starter ingen nye byg. + FreeStyleProject.DisplayName=Byg et free-style projekt +FreeStyleProject.Description=Dette er den centrale feature i Jenkins. Jenkins vil bygge dit projekt i enhver kombination af kildekodestyring (SCM) med ethvert byggesystem og dette kan bruges til meget andet end at bygge software. + ProxyView.DisplayName=Inkluder en global visning -ComputerSet.SpecifySlaveToCopy=Angiv hvilken slave der skal kopieres Run.Permissions.Title=K\u00f8r Hudson.DisplayName=Jenkins Hudson.NotANonNegativeNumber=V\u00e6rdien m\u00e5 ikke v\u00e6re negativ -Slave.Launching={0} Starter slave agent BallColor.InProgress=I gang AbstractProject.NoBuilds=Ingen eksisterende byg. Skedulerer et nyt. Run.BuildAborted=Byg afbrudt BallColor.Aborted=Afbrudt -Slave.InvalidConfig.NoRemoteDir=Ugyldig slavekonfiguration for {0}. Intet fjerndirektorie angivet. ListView.DisplayName=Listevisning UpdateCenter.PluginCategory.page-decorator=Sidedekorat\u00f8rer Cause.LegacyCodeCause.ShortDescription=Legacy kode startede dette job. Ingen startbegrundelse tilg\u00e6ngelig. @@ -80,15 +79,11 @@ UpdateCenter.PluginCategory.post-build=Andre postbyg handlinger Cause.UpstreamCause.ShortDescription=Startet af upstreamprojektet "{0}" byg nummer {1} UpdateCenter.PluginCategory.cli=Kommandolinieinterface UpdateCenter.PluginCategory.builder=Byggev\u00e6rkt\u00f8jer -Slave.UnixSlave=Dette er en Unix slave FileParameterDefinition.DisplayName=Filparametre Run.Summary.Unstable=Ustabil CLI.reload-configuration.shortDescription=Genindl\u00e6s alle data fra filsystemet. \ Nyttigt hvis du har modificeret konfigurationsfiler direkte, udenom Jenkins. -ComputerSet.NoSuchSlave=Ingen slave ved navn: {0} -ComputerSet.SlaveAlreadyExists=En slave ved navn ''{0}'' eksisterer allerede Executor.NotAvailable=N/A -Slave.Terminated={0} slave agenten blev tilintetgjort Item.Permissions.Title=Job AbstractProject.NoWorkspace=Intet arbejdsomr\u00e5de tilg\u00e6ngeligt, kan ikke checke for opdateringer. CLI.disable-job.shortDescription=Sl\u00e5r et job fra @@ -109,7 +104,6 @@ MyView.DisplayName=Min visning Hudson.USER_CONTENT_README=Filer i dette direktorie vil blive serveret under http://server/hudson/userContent/ UpdateCenter.PluginCategory.scm-related=Kildekodestyring (SCM) relateret CLI.cancel-quiet-down.shortDescription=Sl\u00e5 effekten af "quite-down" kommandoen fra. -Slave.InvalidConfig.Executors=Ugyldig slavekonfiguration for {0}. Ugyldigt # afviklere. Api.NoXPathMatch=XPath {0} matcher ikke Run.MarkedExplicitly=Eksplicit markeret til at blive gemt Hudson.Permissions.Title=Overordnet @@ -117,7 +111,6 @@ AbstractProject.UpstreamBuildInProgress=Upstreamprojektet {0} bygger allerede. Permalink.LastBuild=Seneste Byg MyViewsProperty.ViewExistsCheck.NotExist=En visning ved navn {0} findes ikke AbstractItem.NoSuchJobExists=Intet job ved navn ''{0}'' eksisterer. M\u00e5ske mener du ''{1}''? -Slave.InvalidConfig.NoName=Ugyldig slavekonfiguration. Navnet er tomt. Run.Summary.BackToNormal=tilbage p\u00e5 sporet BooleanParameterDefinition.DisplayName=Boolesk V\u00e6rdi Permalink.LastSuccessfulBuild=Seneste succesfulde byg @@ -135,7 +128,6 @@ UpdateCenter.PluginCategory.notifier=Bygge Notifikatorer Label.ProvisionedFrom=Provisioneret fra {0} Run.Summary.Aborted=afbrudt UpdateCenter.PluginCategory.report=Bygge Rapporter -Computer.ConfigurePermission.Description=Denne rettighed tillader brugere at konfigurere slaver. View.Permissions.Title=Visninger Permalink.LastFailedBuild=Seneste fejlede byg UpdateCenter.PluginCategory.scm=Kildekodestyring (SCM) @@ -151,12 +143,10 @@ UpdateCenter.PluginCategory.cluster=Klyngestyring og distribuerede byg AbstractBuild.KeptBecause=beholdt pga. {0} Hudson.NotADirectory={0} er ikke et direktorie Cause.RemoteCause.ShortDescription=Startet af fjernv\u00e6rt {0} -Slave.WindowsSlave=Dette er en Windows slave Run.ArtifactsPermission.Description=\ Denne rettighed g\u00f8r det muligt at hente byggeartifakter. \ Hvis du ikke vil have at en bruger skal kunne tilg\u00e5 byggeartifakter kan \ du fratage vedkommende denne rettighed. -Computer.BadChannel=Slave node offline eller ikke en fjernkanal (f.eks. en masternode). AbstractProject.Aborted=Afbrudt Queue.init=Genopretter byggek\u00f8en Hudson.NodeDescription=master Jenkins noden @@ -176,10 +166,8 @@ s\u00e5vel som at k\u00f8re yderst f\u00f8lsomme operationer der effektivt svare Hudson.NotJDKDir={0} ligner ikke et JDK direktorie AbstractProject.WorkspaceOffline=Arbejdsomr\u00e5det er offline. Queue.HudsonIsAboutToShutDown=Jenkins skal til at lukke ned -UpdateCenter.PluginCategory.slaves=Slavestartere og kontroll\u00f8rer Api.MultipleMatch=XPath "{0}" matcher {1} noder. \ Lav en XPath der kun matcher en, eller brug en "omslags" foresp\u00f8rgselsparameter til at samle dem alle under et rodelement. -Slave.UnableToLaunch=Kan ikke starte en slave agent for {0}{1} Queue.Unknown=??? BallColor.Unstable=Ustabil Job.AllRecentBuildFailed=Alle de seneste byg er fejlet. @@ -212,10 +200,8 @@ Queue.WaitingForNextAvailableExecutorOn=Venter p\u00e5 n\u00e6ste ledige afvikle Hudson.NotANegativeNumber=Ikke en negativ v\u00e6rdi UpdateCenter.PluginCategory.misc=Diverse Queue.InProgress=Et byg er allerede i gang -Computer.DeletePermission.Description=Denne rettighed tillader brugere at slette eksisterende slaver. UpdateCenter.Status.ConnectionFailed= UpdateCenter.PluginCategory.maven=Maven -Computer.Permissions.Title=Slave BallColor.Success=Succes UpdateCenter.PluginCategory.upload=Artifaktsendere Permalink.LastUnstableBuild=Seneste ustabile byg diff --git a/core/src/main/resources/hudson/model/Messages_de.properties b/core/src/main/resources/hudson/model/Messages_de.properties index 5364f43697..21e7988d2c 100644 --- a/core/src/main/resources/hudson/model/Messages_de.properties +++ b/core/src/main/resources/hudson/model/Messages_de.properties @@ -20,7 +20,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -AbstractBuild.BuildingRemotely=Baue auf Slave {0} AbstractBuild.BuildingOnMaster=Baue auf Master AbstractBuild_Building=Baue AbstractBuild.BuildingInWorkspace=\ in Arbeitsbereich {0} @@ -86,23 +85,14 @@ CLI.offline-node.shortDescription=Knoten wird bis zum n\u00e4chsten "online-node CLI.safe-restart.shortDescription=Startet Jenkins neu. Queue.init=Build-Warteschlange neu initialisieren -Computer.Caption=Slave {0} -Computer.Permissions.Title=Slave -Computer.ConfigurePermission.Description=Dieses Recht erlaubt, Slaves zu konfigurieren. -Computer.DeletePermission.Description=Dieses Recht erlaubt, bestehende Slaves zu l\u00f6schen. -Computer.CreatePermission.Description=Dieses Recht erlaubt, neue Slaves zu erstellen. -Computer.ConnectPermission.Description=Dieses Recht erlaubt, Slaves zu verbinden oder als verf\u00fcgbar zu markieren. -Computer.DisconnectPermission.Description=Dieses Recht erlaubt, bestehende Slaves zu entfernen oder als vor\u00fcbergehend nicht verf\u00fcgbar zu markieren. -ComputerSet.NoSuchSlave=Slave ''{0}'' existiert nicht. -ComputerSet.SlaveAlreadyExists=Ein Slave mit Namen ''{0}'' existiert bereits. -ComputerSet.SpecifySlaveToCopy=Geben Sie an, welcher Slave kopiert werden soll ComputerSet.DisplayName=Knoten Executor.NotAvailable=nicht verf\u00fcgbar FreeStyleProject.DisplayName="Free Style"-Softwareprojekt bauen +FreeStyleProject.Description=Dieses Profil ist das meistgenutzte in Jenkins. Jenkins baut Ihr Projekt, wobei Sie universell jedes SCM System mit jedem Build-Verfahren kombinieren k\u00F6nnen. Dieses Profil ist nicht nur auf das Bauen von Software beschr\u00E4nkt, sondern kann dar\u00FCber hinaus auch f\u00FCr weitere Anwendungsgebiete verwendet werden. HealthReport.EmptyString= @@ -208,18 +198,10 @@ Run.Summary.BrokenSinceThisBuild=Defekt seit diesem Build. Run.Summary.BrokenSince=Defekt seit Build {0} Run.Summary.Unknown=Ergebnis unbekannt -Slave.InvalidConfig.Executors=Ung\u00fcltige Slave-Einstellungen f\u00fcr {0}. Ung\u00fcltige Anzahl von Build-Prozessoren. -Slave.InvalidConfig.NoName=Ung\u00fcltige Slave-Einstellungen. Name ist leer. -Slave.InvalidConfig.NoRemoteDir=Ung\u00fcltige Slave-Einstellungen f\u00fcr {0}. Kein entferntes Verzeichnis angegeben. -Slave.Launching={0} Starte Slave-Agent Slave.Network.Mounted.File.System.Warning=\ Sind Sie sicher, da\u00df Sie ein Netzlaufwerk als Stammverzeichnis verwenden m\u00f6chen? \ Hinweis: Dieses Verzeichnis mu\u00df nicht vom Master-Knoten aus sichtbar sein. Slave.Remote.Director.Mandatory=Ein Stammverzeichnis muss angegeben werden. -Slave.Terminated={0} Slave-Agent wurde beendet -Slave.UnableToLaunch=Kann keinen Slave-Agenten starten f\u00fcr {0}{1} -Slave.UnixSlave=Dies ist ein UNIX-Slave -Slave.WindowsSlave=Dies ist ein Windows-Slave UpdateCenter.DownloadButNotActivated=Erfolgreich heruntergeladen. Wird beim n\u00e4chsten Neustart aktiviert. UpdateCenter.n_a=(nicht verf\u00fcgbar) @@ -257,7 +239,6 @@ UpdateCenter.PluginCategory.post-build=Post-Build-Aktionen UpdateCenter.PluginCategory.report=Build-Berichte UpdateCenter.PluginCategory.scm=Versionsverwaltung UpdateCenter.PluginCategory.scm-related=Versionsverwaltung (weiteres Umfeld) -UpdateCenter.PluginCategory.slaves=Slave-Knoten Management UpdateCenter.PluginCategory.trigger=Build-Ausl\u00f6ser UpdateCenter.PluginCategory.ui=Benutzeroberfl\u00e4che UpdateCenter.PluginCategory.upload=Distribution von Artefakten diff --git a/core/src/main/resources/hudson/model/Messages_en_GB.properties b/core/src/main/resources/hudson/model/Messages_en_GB.properties index 9e18978be2..b9d3954d76 100644 --- a/core/src/main/resources/hudson/model/Messages_en_GB.properties +++ b/core/src/main/resources/hudson/model/Messages_en_GB.properties @@ -1 +1 @@ -ParametersDefinitionProperty.DisplayName=This build is parameterised +ParametersDefinitionProperty.DisplayName=This project is parameterised diff --git a/core/src/main/resources/hudson/model/Messages_es.properties b/core/src/main/resources/hudson/model/Messages_es.properties index 0fcdb186d2..29feb6dbeb 100644 --- a/core/src/main/resources/hudson/model/Messages_es.properties +++ b/core/src/main/resources/hudson/model/Messages_es.properties @@ -74,7 +74,7 @@ Executor.NotAvailable=N/D FreeStyleProject.DisplayName=Crear un proyecto de estilo libre - +FreeStyleProject.Description=Esta es la caracter\u00EDstica principal de Jenkins, la de ejecutar el proyecto combinando cualquier tipo de repositorio de software (SCM) con cualquier modo de construcci\u00F3n o ejecuci\u00F3n (make, ant, mvn, rake, script ...). Por tanto se podr\u00E1 tanto compilar y empaquetar software, como ejecutar cualquier proceso que requiera monitorizaci\u00F3n. Hudson.BadPortNumber=N\u00famero err\u00f3neo de puerto {0} Hudson.Computer.Caption=Principal diff --git a/core/src/main/resources/hudson/model/Messages_et.properties b/core/src/main/resources/hudson/model/Messages_et.properties new file mode 100644 index 0000000000..ff3d7fc8bd --- /dev/null +++ b/core/src/main/resources/hudson/model/Messages_et.properties @@ -0,0 +1 @@ +FreeStyleProject.Description=See on Jenkinsi p\u00F5hifunktsioon! Jenkins ehitab su projekti, kombineerides sinu versioonihalduse mistahes ehitusprotsessiga. Sa v\u00F5id seda kasutada ka muudeks asjadeks kui tarkvara ehitamine. \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Messages_fi.properties b/core/src/main/resources/hudson/model/Messages_fi.properties index b8537b4403..cc62c20834 100644 --- a/core/src/main/resources/hudson/model/Messages_fi.properties +++ b/core/src/main/resources/hudson/model/Messages_fi.properties @@ -1 +1,3 @@ ManageJenkinsAction.DisplayName=Hallitse Jenkinsia + +FreeStyleProject.Description=T\u00E4m\u00E4 on Jenkins t\u00E4rkein ominaisuus. Jenkins rakentaa projektisi k\u00E4ytt\u00E4en versionhallintaa ja buildij\u00E4rjestelmi\u00E4. Voit k\u00E4ytt\u00E4\u00E4 t\u00E4t\u00E4 my\u00F6s muuhun kuin ohjelmien k\u00E4\u00E4nt\u00E4miseen. \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Messages_fr.properties b/core/src/main/resources/hudson/model/Messages_fr.properties index 8808e4727c..f9d5295135 100644 --- a/core/src/main/resources/hudson/model/Messages_fr.properties +++ b/core/src/main/resources/hudson/model/Messages_fr.properties @@ -50,18 +50,12 @@ BallColor.Pending=En attente BallColor.Success=Succ\u00e8s BallColor.Unstable=Instable -Computer.Caption=Esclave {0} -Computer.Permissions.Title=Esclave -Computer.ConfigurePermission.Description=Ce droit permet aux utilisateurs de configurer les esclaves. -Computer.DeletePermission.Description=Ce droit permet aux utilisateurs de supprimer les esclaves. -ComputerSet.NoSuchSlave=Cet esclave n''existe pas : {0} -ComputerSet.SlaveAlreadyExists=L''esclave appel\u00e9 ''{0}'' existe d\u00e9j\u00e0 -ComputerSet.SpecifySlaveToCopy=Sp\u00e9cifiez l''esclave \u00e0 copier Executor.NotAvailable=N/A FreeStyleProject.DisplayName=Construire un projet free-style +FreeStyleProject.Description=Ceci est la fonction principale de Jenkins qui sert \u00E0 builder (construire) votre projet.
    Vous pouvez int\u00E9grer tous les outils de gestion de version avec tous les syst\u00E8mes de build.
    Il est m\u00EAme possible d''utiliser Jenkins pour tout autre chose qu''un build logiciel. Hudson.BadPortNumber=Num\u00e9ro de port incorrect {0} Hudson.Computer.Caption=Ma\u00eetre @@ -126,14 +120,6 @@ Run.UpdatePermission.Description=\ Cette option permet aux utilisateurs de mettre \u00e0 jour la description et d''autres propri\u00e9t\u00e9s d''un build, \ par exemple pour laisser des notes sur la cause d''\u00e9chec d''un build. -Slave.InvalidConfig.Executors=Configuration esclave invalide pour {0}. Nombre d''ex\u00e9cuteurs invalide. -Slave.InvalidConfig.NoName=Configuration esclave invalide. Le nom est vide. -Slave.InvalidConfig.NoRemoteDir=Configuration esclave invalide pour {0}. Pas de r\u00e9pertoire distant fourni -Slave.Launching={0} Lancement de l''agent esclave -Slave.Terminated={0} l''agent esclave a \u00e9t\u00e9 termin\u00e9 -Slave.UnableToLaunch=Impossible de lancer l''agent esclave pour {0} {1} -Slave.UnixSlave=Ceci est un esclave Unix -Slave.WindowsSlave=Ceci est un esclave Windows View.Permissions.Title=Vues View.CreatePermission.Description=\ diff --git a/core/src/main/resources/hudson/model/Messages_hi_IN.properties b/core/src/main/resources/hudson/model/Messages_hi_IN.properties new file mode 100644 index 0000000000..58a16a05dd --- /dev/null +++ b/core/src/main/resources/hudson/model/Messages_hi_IN.properties @@ -0,0 +1 @@ +FreeStyleProject.Description=\u092F\u0939 \u091C\u0947\u0928\u0915\u0940\u0902\u0938 \u0915\u0940 \u0915\u0947\u0902\u0926\u094D\u0930\u0940\u092F \u0935\u093F\u0936\u0947\u0937\u0924\u093E \u0939\u0948\u0964 \u091C\u0947\u0928\u0915\u0940\u0902\u0938, \u0915\u093F\u0938\u0940 \u092D\u0940 \u0928\u093F\u0930\u094D\u092E\u093E\u0923 \u092A\u094D\u0930\u0923\u093E\u0932\u0940 \u0915\u0947 \u0938\u093E\u0925 \u0915\u093F\u0938\u0940 \u092D\u0940 \u0938\u0949\u092B\u094D\u091F\u0935\u0947\u092F\u0930 \u0935\u093F\u0928\u094D\u092F\u093E\u0938 \u092A\u094D\u0930\u092C\u0902\u0927\u0928 \u0915\u093E \u0938\u0902\u092F\u094B\u091C\u0928 \u0915\u0930\u0915\u0947 \u0906\u092A\u0915\u0940 \u092A\u0930\u093F\u092F\u094B\u091C\u0928\u093E \u0915\u093E \u0928\u093F\u0930\u094D\u092E\u093E\u0923 \u0915\u0930\u0947\u0917\u093E, \u0914\u0930 \u0907\u0938\u0915\u093E \u092A\u094D\u0930\u092F\u094B\u0917 \u0938\u0949\u092B\u094D\u091F\u0935\u0947\u092F\u0930 \u0915\u093E \u0928\u093F\u0930\u094D\u092E\u093E\u0923 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0905\u0932\u093E\u0935\u093E \u0905\u0928\u094D\u092F \u0915\u093E\u0930\u094D\u092F\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F \u092D\u0940 \u0915\u093F\u092F\u093E \u091C\u093E \u0938\u0915\u0924\u093E \u0939\u0948. diff --git a/core/src/main/resources/hudson/model/Messages_id.properties b/core/src/main/resources/hudson/model/Messages_id.properties new file mode 100644 index 0000000000..fbb242f35c --- /dev/null +++ b/core/src/main/resources/hudson/model/Messages_id.properties @@ -0,0 +1 @@ +FreeStyleProject.Description=Ini adalah fitur sentral dari Jenkins. Jenkins akan membangun proyek anda, mengkombinasikan SCM apa pun dengan sistem pembangunan, dan ini akan digunakan untuk sesuatu selain pembangunan piranti lunak. diff --git a/core/src/main/resources/hudson/model/Messages_it.properties b/core/src/main/resources/hudson/model/Messages_it.properties index faa69c1371..6beced04f0 100644 --- a/core/src/main/resources/hudson/model/Messages_it.properties +++ b/core/src/main/resources/hudson/model/Messages_it.properties @@ -28,7 +28,6 @@ AbstractBuild.KeptBecause=kept because of {0} AbstractItem.NoSuchJobExists=Nessun job di nome ''{0}'' esiste. Intendevi forse ''{1}''? AbstractItem.Pronoun=Job -AbstractProject.AssignedLabelString_NoMatch_DidYouMean=There''s no slave/cloud that matches this assignment. Did you mean ''{1}'' instead of ''{0}''? AbstractProject.NewBuildForWorkspace=Scheduling a new build to get a workspace. AbstractProject.AwaitingBuildForWorkspace=Awaiting build to get a workspace. AbstractProject.Pronoun=Progetto @@ -56,8 +55,6 @@ AbstractProject.WipeOutPermission.Description=\ This permission grants the ability to wipe out the contents of a workspace. AbstractProject.AssignedLabelString.InvalidBooleanExpression=\ Espressione booleana non valida: {0} -AbstractProject.AssignedLabelString.NoMatch=\ - There's no slave/cloud that matches this assignment Api.MultipleMatch=XPath "{0}" corrisponde a {1} nodi. \ Creare un XPath che corrisponde ad un solo valore, oppure utilizzare una query "wrapper" \ @@ -81,24 +78,13 @@ CLI.offline-node.shortDescription=Stop using a node for performing builds tempor CLI.wait-node-online.shortDescription=Attende che il nodo sia attivo CLI.wait-node-offline.shortDescription=Attende che un nodo sia disattivo -Computer.Caption=Slave {0} -Computer.NoSuchSlaveExists=No such slave "{0}" exists. Did you mean "{1}"? -Computer.Permissions.Title=Slave -Computer.ConfigurePermission.Description=This permission allows users to configure slaves. -Computer.DeletePermission.Description=This permission allows users to delete existing slaves. -Computer.CreatePermission.Description=This permission allows users to create slaves. -Computer.ConnectPermission.Description=This permission allows users to connect slaves or mark slaves as online. -Computer.DisconnectPermission.Description=This permission allows users to disconnect slaves or mark slaves as temporarily offline. -Computer.BadChannel=Slave node offline or not a remote channel (such as master node). -ComputerSet.NoSuchSlave=No such slave: {0} -ComputerSet.SlaveAlreadyExists=Slave called ''{0}'' already exists -ComputerSet.SpecifySlaveToCopy=Specify which slave to copy ComputerSet.DisplayName=nodes Executor.NotAvailable=N/A FreeStyleProject.DisplayName=Configura una build di tipo generico +FreeStyleProject.Description=Questa \u00E8 la funzione principale di Jenkins. Jenkins effettuer\u00E0 una compilazione del progetto, combinando qualsiasi SCM con qualsiasi sistema di compilazione e si pu\u00F2 usare anche per qualcosa di altro che non sia un programma di compilazione. HealthReport.EmptyString= @@ -204,16 +190,8 @@ Run.Summary.BrokenSinceThisBuild=broken since this build Run.Summary.BrokenSince=broken since build {0} Run.Summary.Unknown=? -Slave.InvalidConfig.Executors=Invalid slave configuration for {0}. Invalid # of executors. -Slave.InvalidConfig.NoName=Invalid slave configuration. Name is empty -Slave.InvalidConfig.NoRemoteDir=Invalid slave configuration for {0}. No remote directory given -Slave.Launching={0} Launching slave agent Slave.Network.Mounted.File.System.Warning=Are you sure you want to use network mounted file system for FS root? Note that this directory does not need to be visible to the master. Slave.Remote.Director.Mandatory=Remote directory is mandatory -Slave.Terminated={0} slave agent was terminated -Slave.UnableToLaunch=Unable to launch the slave agent for {0}{1} -Slave.UnixSlave=This is a Unix slave -Slave.WindowsSlave=This is a Windows slave UpdateCenter.DownloadButNotActivated=Downloaded Successfully. Will be activated during the next boot View.Permissions.Title=View @@ -249,7 +227,6 @@ UpdateCenter.PluginCategory.post-build=Other Post-Build Actions UpdateCenter.PluginCategory.report=Build Reports UpdateCenter.PluginCategory.scm=Source Code Management UpdateCenter.PluginCategory.scm-related=Source Code Management related -UpdateCenter.PluginCategory.slaves=Slave Launchers and Controllers UpdateCenter.PluginCategory.trigger=Build Triggers UpdateCenter.PluginCategory.ui=User Interface UpdateCenter.PluginCategory.upload=Artifact Uploaders @@ -266,14 +243,14 @@ Permalink.LastFailedBuild=Last failed build ParameterAction.DisplayName=Parameters StringParameterDefinition.DisplayName=String Parameter -TextParameterDefinition.DisplayName=Text Parameter +TextParameterDefinition.DisplayName=Multi-line String Parameter FileParameterDefinition.DisplayName=File Parameter BooleanParameterDefinition.DisplayName=Boolean Value ChoiceParameterDefinition.DisplayName=Choice RunParameterDefinition.DisplayName=Run Parameter PasswordParameterDefinition.DisplayName=Password Parameter -Node.Mode.NORMAL=Utilize this slave as much as possible +Node.Mode.NORMAL=Utilize this agent as much as possible Node.Mode.EXCLUSIVE=Leave this machine for tied jobs only ListView.DisplayName=List View diff --git a/core/src/main/resources/hudson/model/Messages_ja.properties b/core/src/main/resources/hudson/model/Messages_ja.properties index 44c18eefc5..f36f34306a 100644 --- a/core/src/main/resources/hudson/model/Messages_ja.properties +++ b/core/src/main/resources/hudson/model/Messages_ja.properties @@ -28,8 +28,6 @@ AbstractBuild.KeptBecause={0}\u306e\u305f\u3081\u3001\u4fdd\u5b58\u3057\u307e\u3 AbstractItem.NoSuchJobExists=\u30b8\u30e7\u30d6''{0}''\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002''{1}''\u3067\u3059\u304b? AbstractItem.Pronoun=\u30b8\u30e7\u30d6 -AbstractProject.AssignedLabelString_NoMatch_DidYouMean=\ - \u8a72\u5f53\u3059\u308b\u30b9\u30ec\u30fc\u30d6\u3084\u30ce\u30fc\u30c9\u306f\u3042\u308a\u307e\u305b\u3093\u3002''{0}''\u3067\u306f\u306a\u304f\u3066''{1}''\u306e\u3053\u3068\u3067\u3059\u304b? AbstractProject.NewBuildForWorkspace=\u65b0\u898f\u306e\u30d3\u30eb\u30c9\u3092\u5b9f\u884c\u3057\u3066\u3001\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002 AbstractProject.AwaitingBuildForWorkspace=\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u304c\u7528\u610f\u3067\u304d\u308b\u307e\u3067\u30d3\u30eb\u30c9\u3092\u4fdd\u7559\u3057\u307e\u3059\u3002 AbstractProject.Pronoun=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 @@ -60,7 +58,6 @@ AbstractProject.CancelPermission.Description=\ \u30d3\u30eb\u30c9\u306e\u30ad\u30e3\u30f3\u30bb\u30eb\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002 AbstractProject.AssignedLabelString.InvalidBooleanExpression=\ \u30e9\u30d9\u30eb\u5f0f\u306b\u9593\u9055\u3044\u304c\u3042\u308a\u307e\u3059\u3002: {0} -AbstractProject.AssignedLabelString.NoMatch=\ \u8a72\u5f53\u3059\u308b\u30b9\u30ec\u30fc\u30d6\u3082\u3057\u304f\u306f\u30af\u30e9\u30a6\u30c9\u306f\u3042\u308a\u307e\u305b\u3093\u3002 AbstractProject.CustomWorkspaceEmpty=\u30ab\u30b9\u30bf\u30e0\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u304c\u5165\u529b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 @@ -77,21 +74,7 @@ BallColor.Pending=\u672a\u6c7a\u5b9a BallColor.Success=\u6210\u529f BallColor.Unstable=\u4e0d\u5b89\u5b9a -Computer.Caption=\u30b9\u30ec\u30fc\u30d6 {0} -Computer.NoSuchSlaveExists="{0}"\u3068\u3044\u3046\u30b9\u30ec\u30fc\u30d6\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002"{1}"\u306e\u3053\u3068\u3067\u3059\u304b? -Computer.Permissions.Title=\u30b9\u30ec\u30fc\u30d6 -Computer.ExtendedReadPermission.Description=\u30b9\u30ec\u30fc\u30d6\u306e\u8a2d\u5b9a\u306e\u53c2\u7167\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002 -Computer.ConfigurePermission.Description=\u30b9\u30ec\u30fc\u30d6\u306e\u8a2d\u5b9a\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002 -Computer.DeletePermission.Description=\u30b9\u30ec\u30fc\u30d6\u306e\u524a\u9664\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002 -Computer.CreatePermission.Description=\u30b9\u30ec\u30fc\u30d6\u306e\u4f5c\u6210\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002 -Computer.ConnectPermission.Description=\u30b9\u30ec\u30fc\u30d6\u3078\u306e\u63a5\u7d9a\u3068\u30aa\u30f3\u30e9\u30a4\u30f3\u5316\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002 -Computer.DisconnectPermission.Description=\u30b9\u30ec\u30fc\u30d6\u306e\u5207\u65ad\u3068\u4e00\u6642\u7684\u306a\u30aa\u30d5\u30e9\u30a4\u30f3\u5316\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002 -Computer.BuildPermission.Description=\u30b9\u30ec\u30fc\u30d6\u4e0a\u3067\u306e\u30b8\u30e7\u30d6\u306e\u8d77\u52d5\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002 -Computer.BadChannel=\u30b9\u30ec\u30fc\u30d6\u30ce\u30fc\u30c9\u304c\u30aa\u30d5\u30e9\u30a4\u30f3\u304b\u30ea\u30e2\u30fc\u30c8\u30c1\u30e3\u30cd\u30eb\u3067\u3059(\u30de\u30b9\u30bf\u30fc\u30ce\u30fc\u30c9\u306a\u3069)\u3002 -ComputerSet.NoSuchSlave=\u30b9\u30ec\u30fc\u30d6\u304c\u5b58\u5728\u3057\u307e\u305b\u3093: {0} -ComputerSet.SlaveAlreadyExists=''{0}''\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059 -ComputerSet.SpecifySlaveToCopy=\u30b3\u30d4\u30fc\u3059\u308b\u30b9\u30ec\u30fc\u30d6\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 ComputerSet.DisplayName=\u30ce\u30fc\u30c9 Descriptor.From=(from {0}) @@ -100,6 +83,10 @@ Executor.NotAvailable=N/A FreeStyleProject.DisplayName=\u30d5\u30ea\u30fc\u30b9\u30bf\u30a4\u30eb\u30fb\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d3\u30eb\u30c9 +FreeStyleProject.Description=\ + \u3082\u3063\u3068\u3082\u6c4e\u7528\u6027\u306e\u9ad8\u3044Jenkins\u306e\u4e2d\u6838\u6a5f\u80fd\u3067\u3059\u3002\u4efb\u610f\u306eSCM\u304b\u3089\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u3001\ + \u4efb\u610f\u306e\u30d3\u30eb\u30c9\u30b7\u30b9\u30c6\u30e0\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u30d3\u30eb\u30c9\u3067\u304d\u307e\u3059\u3002\u5f80\u3005\u306b\u3057\u3066\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u30d3\u30eb\u30c9\u4ee5\u5916\u306b\u3082\ + \u69d8\u3005\u306a\u4ed5\u4e8b\u306e\u81ea\u52d5\u5316\u306b\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 HealthReport.EmptyString= @@ -204,17 +191,9 @@ Run.Summary.BrokenSinceThisBuild=\u3053\u306e\u30d3\u30eb\u30c9\u304b\u3089\u654 Run.Summary.BrokenSince=\u30d3\u30eb\u30c9{0}\u304b\u3089\u6545\u969c Run.Summary.Unknown=? -Slave.InvalidConfig.Executors=\u30b9\u30ec\u30fc\u30d6 {0} \u306e\u8a2d\u5b9a\u306b\u8aa4\u308a\u304c\u3042\u308a\u307e\u3059\u3002\u540c\u6642\u5b9f\u884c\u6570\u304c\u4e0d\u6b63\u3067\u3059\u3002 -Slave.InvalidConfig.NoName=\u30b9\u30ec\u30fc\u30d6\u306e\u8a2d\u5b9a\u306b\u8aa4\u308a\u304c\u3042\u308a\u307e\u3059\u3002\u540d\u524d\u304c\u672a\u8a2d\u5b9a\u3067\u3059\u3002 -Slave.InvalidConfig.NoRemoteDir=\u30b9\u30ec\u30fc\u30d6 {0} \u306e\u8a2d\u5b9a\u306b\u8aa4\u308a\u304c\u3042\u308a\u307e\u3059\u3002\u30ea\u30e2\u30fc\u30c8FS\u30eb\u30fc\u30c8\u304c\u672a\u8a2d\u5b9a\u3067\u3059\u3002 -Slave.Launching=\u30b9\u30ec\u30fc\u30d6\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u8d77\u52d5\u3057\u307e\u3057\u305f\u3002{0} Slave.Network.Mounted.File.System.Warning=\u672c\u5f53\u306bFS\u30eb\u30fc\u30c8\u3068\u3057\u3066\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30de\u30a6\u30f3\u30c8\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u4f7f\u7528\u3057\u305f\u3044\u3067\u3059\u304b\uff1f \u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u30de\u30b9\u30bf\u30fc\u306b\u898b\u3048\u308b\u5fc5\u8981\u306f\u7121\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002 Slave.Remote.Director.Mandatory=\u30ea\u30e2\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u5fc5\u9808\u3067\u3059\u3002 -Slave.Terminated=\u30b9\u30ec\u30fc\u30d6\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u7d42\u4e86\u3057\u307e\u3057\u305f\u3002{0} Slave.the_remote_root_must_be_an_absolute_path=\u30ea\u30e2\u30fc\u30c9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u7d76\u5bfe\u30d1\u30b9\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -Slave.UnableToLaunch=\u30b9\u30ec\u30fc\u30d6\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8 {0} \u3092\u8d77\u52d5\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002{1} -Slave.UnixSlave=\u3053\u308c\u306fUnix\u306e\u30b9\u30ec\u30fc\u30d6\u3067\u3059\u3002 -Slave.WindowsSlave=\u3053\u308c\u306fWindows\u306e\u30b9\u30ec\u30fc\u30d6\u3067\u3059\u3002 UpdateCenter.DownloadButNotActivated=\u6b63\u5e38\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3057\u305f\u3002\u6b21\u306e\u30d6\u30fc\u30c8\u6642\u306b\u6709\u52b9\u306b\u306a\u308a\u307e\u3059\u3002 UpdateCenter.n_a=N/A @@ -254,7 +233,6 @@ UpdateCenter.PluginCategory.post-build=\u30d3\u30eb\u30c9\u5f8c\u306e\u30a2\u30a UpdateCenter.PluginCategory.report=\u30d3\u30eb\u30c9\u30ec\u30dd\u30fc\u30c8 UpdateCenter.PluginCategory.scm=\u30bd\u30fc\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0 UpdateCenter.PluginCategory.scm-related=\u30bd\u30fc\u30b9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u95a2\u9023 -UpdateCenter.PluginCategory.slaves=\u30b9\u30ec\u30fc\u30d6\u306e\u8d77\u52d5\u3068\u7ba1\u7406 UpdateCenter.PluginCategory.trigger=\u30d3\u30eb\u30c9\u30c8\u30ea\u30ac UpdateCenter.PluginCategory.ui=\u30e6\u30fc\u30b6\u30fc\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 UpdateCenter.PluginCategory.upload=\u6210\u679c\u7269\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9 diff --git a/core/src/main/resources/hudson/model/Messages_ko.properties b/core/src/main/resources/hudson/model/Messages_ko.properties index 70020b26be..02b6a1d0ae 100644 --- a/core/src/main/resources/hudson/model/Messages_ko.properties +++ b/core/src/main/resources/hudson/model/Messages_ko.properties @@ -1,2 +1,4 @@ ManageJenkinsAction.DisplayName=Jenkins \uAD00\uB9AC ParametersDefinitionProperty.DisplayName=\uC774 \uBE4C\uB4DC\uB294 \uB9E4\uAC1C\uBCC0\uC218\uAC00 \uC788\uC2B5\uB2C8\uB2E4 + +FreeStyleProject.Description=\uC774\uAC83\uC740 Jenkins\uC758 \uC8FC\uC694 \uAE30\uB2A5\uC785\uB2C8\uB2E4. Jenkins\uC740 \uC5B4\uB290 \uBE4C\uB4DC \uC2DC\uC2A4\uD15C\uACFC \uC5B4\uB5A4 SCM(\uD615\uC0C1\uAD00\uB9AC)\uC73C\uB85C \uBB36\uC778 \uB2F9\uC2E0\uC758 \uD504\uB85C\uC81D\uD2B8\uB97C \uBE4C\uB4DC\uD560 \uAC83\uC774\uACE0, \uC18C\uD504\uD2B8\uC6E8\uC5B4 \uBE4C\uB4DC\uBCF4\uB2E4 \uB2E4\uB978 \uC5B4\uB5A4 \uAC83\uC5D0 \uC790\uC8FC \uC0AC\uC6A9\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Messages_lt.properties b/core/src/main/resources/hudson/model/Messages_lt.properties index 4dac83724a..f29e8e9d88 100644 --- a/core/src/main/resources/hudson/model/Messages_lt.properties +++ b/core/src/main/resources/hudson/model/Messages_lt.properties @@ -1 +1,3 @@ ParametersDefinitionProperty.DisplayName=\u0160is darbas yra parametrizuotas + +FreeStyleProject.Description=Pagrindin\u0117 Jenkins funkcija. Jenkins sukonstruos j\u016Bs\u0173 projekt\u0105, sujungdamas betkok\u012F SCM su betkokia konstravimo sistema. \u0160is darbo tipas gali b\u016Bt pritaikytas ne tik program\u0173 konstravimui. \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Messages_nb_NO.properties b/core/src/main/resources/hudson/model/Messages_nb_NO.properties index fe7187183a..d1098629e6 100644 --- a/core/src/main/resources/hudson/model/Messages_nb_NO.properties +++ b/core/src/main/resources/hudson/model/Messages_nb_NO.properties @@ -1,2 +1,4 @@ ManageJenkinsAction.DisplayName=Konfigurer Jenkins ParametersDefinitionProperty.DisplayName=Denne build har parametre + +FreeStyleProject.Description=Dette er en sentral egenskap ved Jenkins. Jenkins bygger dine prosjekter, kombinerer SCM (Source Control Management - Kildekodekontrollsystem ) med forskjellige byggsystemer og denne kan ogs\u00E5 brukes til mer enn bare \u00E5 bygge applikasjoner. diff --git a/core/src/main/resources/hudson/model/Messages_nl.properties b/core/src/main/resources/hudson/model/Messages_nl.properties index e7b5b57aa6..3db4e11f0b 100644 --- a/core/src/main/resources/hudson/model/Messages_nl.properties +++ b/core/src/main/resources/hudson/model/Messages_nl.properties @@ -44,12 +44,12 @@ BallColor.Pending=In afwachting BallColor.Success=Succes BallColor.Unstable=Onstabiel -Computer.Caption=Slaaf {0} Executor.NotAvailable=Niet beschikbaar FreeStyleProject.DisplayName=Bouw een vrije stijl type software project +FreeStyleProject.Description=Dit is de basisfunctionaliteit van Jenkins. Bij dit type project kun je gebruik maken van een willekeurige combinatie van versiebeheer- en bouwsysteem. Je zou Jenkins zelfs kunnen gebruiken voor andere zaken dan het bouwen van software. Hudson.BadPortNumber=Verkeerd poortnummer {0} Hudson.Computer.Caption=Hoofdnode @@ -86,14 +86,6 @@ Run.MarkedExplicitly=Expliciet gemarkeerd ter opbouw van historiek Run.Permissions.Title=Starten Run.UnableToDelete=Kan {0} niet verwijderen: {1} -Slave.InvalidConfig.Executors=Ongeldige configuratie voor slaaf {0}: Ongeldig aantal uitvoerders. -Slave.InvalidConfig.NoName=Ongeldige configuratie voor slaaf. Geen naam gespecificeerd. -Slave.InvalidConfig.NoRemoteDir=Ongeldige configuratie voor slaaf {0}. Geen pad op afstand opgegeven. -Slave.Launching={0} Slaaf node wordt gestart. -Slave.Terminated={0} Slaaf node werd be\u00ebindigd -Slave.UnableToLaunch=Kon de slaaf node niet starten voor {0} {1} -Slave.UnixSlave=Dit is een Unix slaaf node -Slave.WindowsSlave=Dit is een Windows slaaf node View.Permissions.Title=Tonen Permalink.LastBuild=Laatste bouwpoging diff --git a/core/src/main/resources/hudson/model/Messages_pl.properties b/core/src/main/resources/hudson/model/Messages_pl.properties index 87f49975e9..1ffaf84e4e 100644 --- a/core/src/main/resources/hudson/model/Messages_pl.properties +++ b/core/src/main/resources/hudson/model/Messages_pl.properties @@ -46,3 +46,4 @@ UpdateCenter.Status.Success=Zako\u0144czono pomy\u015Blnie MyViewsProperty.DisplayName=Moje widoki MyViewsProperty.GlobalAction.DisplayName=Moje widoki +FreeStyleProject.Description=To jest podstawowa funkcja Jenkinsa. Jenkins stworzy projekt \u0142\u0105cz\u0105cy dowolny SCM z dowolnym systemem buduj\u0105cym, mo\u017Ce to by\u0107 r\u00F3wnie\u017C wykorzystane do czego\u015B innego ni\u017C budowanie oprogramowania. \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Messages_pt_BR.properties b/core/src/main/resources/hudson/model/Messages_pt_BR.properties index e835890220..0a3f406e25 100644 --- a/core/src/main/resources/hudson/model/Messages_pt_BR.properties +++ b/core/src/main/resources/hudson/model/Messages_pt_BR.properties @@ -44,12 +44,12 @@ BallColor.Pending=Pendente BallColor.Success=Sucesso BallColor.Unstable=Inst\u00e1vel -Computer.Caption=Slave {0} Executor.NotAvailable=N/D FreeStyleProject.DisplayName=Construir um projeto de software free-style +FreeStyleProject.Description=Esta \u00e9 a central de funcionalidades do Jenkins. Ele construir\u00e1 seu projeto,e voc\u00ea pode combinar qualquer SCM com qualquer sistema de builds, e ele at\u00e9 mesmo pode ser usado para outras jobs diferentes de builds de software. Hudson.BadPortNumber=N\u00famero de porta ruim {0} Hudson.Computer.Caption=Master @@ -85,14 +85,6 @@ Run.MarkedExplicitly=Explicitamente marcada para manter o registro Run.Permissions.Title=Executar Run.UnableToDelete=N\u00e3o foi poss\u00edvel excluir {0}: {1} -Slave.InvalidConfig.Executors=Configura\u00e7\u00e3o de slave inv\u00e1lida para {0}. Inv\u00e1lido # de executores. -Slave.InvalidConfig.NoName=Configura\u00e7\u00e3o de slave inv\u00e1lida. O nome est\u00e1 vazio -Slave.InvalidConfig.NoRemoteDir=Configura\u00e7\u00e3o de slave inv\u00e1lida para {0}. Nenhum diret\u00f3rio remoto foi informado -Slave.Launching={0} Iniciando agente slave -Slave.Terminated={0} Agente slave foi encerrado -Slave.UnableToLaunch=N\u00e3o foi poss\u00edvel iniciar o agente slave para {0}{1} -Slave.UnixSlave=Este \u00e9 um slave Unix -Slave.WindowsSlave=Este \u00e9 um slave Windows View.Permissions.Title=Vis\u00e3o Permalink.LastBuild=\u00daltimo build @@ -123,8 +115,6 @@ MyViewsProperty.GlobalAction.DisplayName= Minhas views Run.UpdatePermission.Description=Essa permiss\u00e3o permite aos usu\u00e1rios atualizarem a descri\u00e7\u00e3o e outras propriedades do build # String Parameter StringParameterDefinition.DisplayName=Par\u00e2metro string -# Utilize this slave as much as possible -Node.Mode.NORMAL=Utilize este slave, tanto quanto poss\u00edvel # Global view {0} does not exist ProxyView.NoSuchViewExists= Vis\u00e3o global {0} n\u00e3o existe # External Site/Tool Integrations @@ -160,8 +150,6 @@ CLI.safe-restart.shortDescription=Seguro reiniciar o Jenkins CLI.quiet-down.shortDescription=Desativar em modo silencioso, em prepara\u00e7\u00e3o para o rein\u00edcio. N\u00e3o come\u00e7e nenhum build. # Include a global view ProxyView.DisplayName=Incluir uma vis\u00e3o global -# Specify which slave to copy -ComputerSet.SpecifySlaveToCopy=Especifica para qual slave copiar # Number may not be negative Hudson.NotANonNegativeNumber=N\u00famero n\u00e3o pode ser negativo # No existing build. Scheduling a new one. @@ -190,10 +178,6 @@ Run.Summary.Unstable=Inst\u00e1vel # Discard all the loaded data in memory and reload everything from file system. Useful when you modified config files directly on disk. CLI.reload-configuration.shortDescription=Descarta todo o conte\u00fado de mem\u00f3ria e recarrega novamente a partir do arquivo. / Indicado quando voc\u00ea modificou os arquivos diretamente no disco. -# Slave called ''{0}'' already exists -ComputerSet.SlaveAlreadyExists=Slave ''{0}'' j\u00e1 existe -# No such slave: {0} -ComputerSet.NoSuchSlave=Nenhum slave: {0} # Disables a job CLI.disable-job.shortDescription=Desabilitar uma job # Build Triggers @@ -261,8 +245,6 @@ Label.ProvisionedFrom=Aprovisionado para {0} Run.Summary.Aborted=Abortado # Build Reports UpdateCenter.PluginCategory.report=Relat\u00f3rio de builds -# This permission allows users to configure slaves. -Computer.ConfigurePermission.Description=Essa permiss\u00e3o permite aos usu\u00e1rios configurarem os slaves # Source Code Management UpdateCenter.PluginCategory.scm=Gerenciamento de c\u00f3digo fonte # \ @@ -283,8 +265,6 @@ PasswordParameterDefinition.DisplayName=Par\u00e2metro da senha UpdateCenter.PluginCategory.cluster=Gerenciamento de cluster e builds distribu\u00eddos # Started by remote host {0} Cause.RemoteCause.ShortDescription=Iniciado pelo host remoto {0} -# Slave node offline or not a remote channel (such as master node). -Computer.BadChannel=N\u00f3 slave est\u00e1 offline ou n\u00e3o existe um canal remoto (n\u00f3 master) # Restoring the build queue Queue.init=Restaurando a fila de builds # the master Jenkins node @@ -308,9 +288,6 @@ MyViewsProperty.ViewExistsCheck.AlreadyExists=J\u00e1 existe uma view com o nome Hudson.AdministerPermission.Description=Permiss\u00e3o para habilitar a configura\u00e7\u00e3o ampla # Jenkins is about to shut down Queue.HudsonIsAboutToShutDown=Jenkins est\u00e1 prestes a encerrar -# {0} less {0,choice,0#tests are|1#test is|1Failed to connect to {0}. \ # Perhaps you need to configure HTTP proxy? UpdateCenter.Status.ConnectionFailed=Erro ao conectar {0} / # Maven UpdateCenter.PluginCategory.maven=Maven -# Slave -Computer.Permissions.Title=Slave # Artifact Uploaders UpdateCenter.PluginCategory.upload=Carregadores de artefatos # Last unstable build @@ -400,10 +371,6 @@ AbstractBuild_Building=Construindo Item.CREATE.description=Cria um novo job. # The remote root must be an absolute path. Slave.the_remote_root_must_be_an_absolute_path=A raiz remota deve ser um caminho absoluto. -# This permission allows users to disconnect slaves or mark slaves as temporarily offline. -Computer.DisconnectPermission.Description=Esta permiss\u00e3o deixa que usu\u00e1rios desconectem slaves ou os marque como temporariamente offline. -# This permission allows users to create slaves. -Computer.CreatePermission.Description=Exta permiss\u00e3o deixa usu\u00e1rios criarem slaves. # See a job. (You may deny this permission but allow Discover to force an anonymous user to log in to see the job.) Item.READ.description=Ver um job. (Voc\u00ea pode impedir essa permiss\u00e3o mas permitir Discover para forcar um usu\u00e1rio an\u00f4nimo a logar para ver o job) # This permission grants the ability to retrieve the artifacts produced by \ @@ -414,8 +381,6 @@ Run.ArtifactsPermission.Description=Esta permiss\u00e3o permite a habilidade de revogar esta permiss\u00e3o. # Invalid boolean expression: {0} AbstractProject.AssignedLabelString.InvalidBooleanExpression=Espress\u00e3o booleana inv\u00e1lida: {0} -# This permission allows users to connect slaves or mark slaves as online. -Computer.ConnectPermission.Description=Esta permiss\u00e3o deixa que usu\u00e1rios conectem slaves ou os marque como online. # originally caused by: Cause.UpstreamCause.CausedBy=originalmente causado por: # Invalid token provided. @@ -424,12 +389,8 @@ BuildAuthorizationToken.InvalidTokenProvided=Token inv\u00e1lido fornecido. TextParameterDefinition.DisplayName=Par\u00e2metro de texto # Downloaded Successfully. Will be activated during the next boot UpdateCenter.DownloadButNotActivated=Download finalizado com sucesso. Ser\u00e1 ativado no pr\u00f3ximo boot -# There\u2019s no slave/cloud that matches this assignment. Did you mean \u2018{1}\u2019 instead of \u2018{0}\u2019? -AbstractProject.AssignedLabelString_NoMatch_DidYouMean=N\u00e3o h\u00e1 um slave ou n\u00favem que combine com esta atribui\u00e7\u00e3o. Voc\u00ea quis dizer \u2018{1}\u2019 ao inv\u00e9s de \u2018{0}\u2019? # {0} doesn\u2019t have a permission to run on {1} Node.LackingBuildPermission={0} n\u00e3o tem permiss\u00e3o para executar em {1} -# This permission allows users to read slave configuration. -Computer.ExtendedReadPermission.Description=Esta permiss\u00e3o deixa usu\u00e1rios lerem as configura\u00e7\u00f5es dos slaves. # Not built ResultTrend.NotBuilt=N\u00e3o constru\u00eddo # There are no nodes with the label \u2018{0}\u2019 @@ -470,18 +431,12 @@ ResultTrend.Failure=Falha AbstractProject.WipeOutPermission.Description=Esta permiss\u00e3o deixa que seja eleminado o conte\u00fado de um workspace. # Requires Choices. ChoiceParameterDefinition.MissingChoices=Exige escolhas. -# This permission allows users to run jobs as them on slaves. -Computer.BuildPermission.Description=Esta permiss\u00e3o deixa que usu\u00e1rios executem jobs em slaves. -# No such slave "{0}" exists. Did you mean "{1}"? -Computer.NoSuchSlaveExists=N\u00e3o existe o slave {0}. Voc\u00ea quis dizer "{1}"? # Aborted ResultTrend.Aborted=Abortado # This permission allows users to see views (implied by generic read access). View.ReadPermission.Description=Esta permiss\u00e3o deixa que usu\u00e1rios vejam views (inpl\u00edcito pela permiss\u00e3o gen\u00e9rica de leitura). # "{0}" is not allowed name Jenkins.NotAllowedName="{0}" n\u00e3o \u00e9 um nome permitido -# There's no slave/cloud that matches this assignment -AbstractProject.AssignedLabelString.NoMatch=N\u00e3o h\u00e1 um slave/n\u00favem que combine com esta atribui\u00e7\u00e3o # Workspace of {0} on {1} AbstractProject.WorkspaceTitleOnComputer=Workspace {0} em {1} # This permission grants the ability to cancel a scheduled, or abort a running, build. diff --git a/core/src/main/resources/hudson/model/Messages_pt_PT.properties b/core/src/main/resources/hudson/model/Messages_pt_PT.properties index e022d96cef..be8cf4950c 100644 --- a/core/src/main/resources/hudson/model/Messages_pt_PT.properties +++ b/core/src/main/resources/hudson/model/Messages_pt_PT.properties @@ -1 +1,3 @@ ManageJenkinsAction.DisplayName=Gerir o Jenkins + +FreeStyleProject.Description=Isto \u00E9 uma caracter\u00EDstica central do Jenkins. Jenkins vai construir o seu projecto, combinando qualquer SCM com qualquer sistema de compila\u00E7\u00E3o e isto pode ser usado mesmo em qualquer outra compila\u00E7\u00E3o de software. diff --git a/core/src/main/resources/hudson/model/Messages_ro.properties b/core/src/main/resources/hudson/model/Messages_ro.properties index 106056997c..8a8fa99a17 100644 --- a/core/src/main/resources/hudson/model/Messages_ro.properties +++ b/core/src/main/resources/hudson/model/Messages_ro.properties @@ -1 +1,3 @@ ParametersDefinitionProperty.DisplayName=Acest build este parametrizat + +FreeStyleProject.Description=Aceasta este func\u021Bionalitatea principal\u0103 a lui Jenkins. Jenkins va construi proiectul dvs, combin\u00E2nd orice SCM cu orice sistem de build-uri, \u0219i aceasta poate fi folosit\u0103 chiar \u0219i la altceva dec\u00E2t build-uri de aplica\u021Bii. diff --git a/core/src/main/resources/hudson/model/Messages_ru.properties b/core/src/main/resources/hudson/model/Messages_ru.properties index b966716ec0..2b0130c8fd 100644 --- a/core/src/main/resources/hudson/model/Messages_ru.properties +++ b/core/src/main/resources/hudson/model/Messages_ru.properties @@ -44,12 +44,15 @@ BallColor.Pending=\u041e\u0436\u0438\u0434\u0430\u0435\u0442 BallColor.Success=\u0423\u0441\u043f\u0435\u0448\u043d\u043e BallColor.Unstable=\u041D\u0435\u0441\u0442\u0430\u0431\u0438\u043B\u044C\u043D\u044B\u0439 -Computer.Caption=\u041f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b {0} Executor.NotAvailable=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e FreeStyleProject.DisplayName=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u0441\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 +FreeStyleProject.Description=\ + \u042d\u0442\u043e - \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f \u0437\u0430\u0434\u0430\u0447 \u0432 Jenkins. \ + Jenkins \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044f \u043b\u044e\u0431\u0443\u044e SCM \u0441 \u043b\u044e\u0431\u043e\u0439 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \ + \u0414\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u041f\u041e. Hudson.BadPortNumber=\u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u0440\u0442\u0430: {0} Hudson.Computer.Caption=\u041c\u0430\u0441\u0442\u0435\u0440 @@ -86,14 +89,6 @@ Run.MarkedExplicitly=\u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e \u0434\u04 Run.Permissions.Title=\u0417\u0430\u043f\u0443\u0441\u043a Run.UnableToDelete=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c {0}: {1} -Slave.InvalidConfig.Executors=\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 {0}. \u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. -Slave.InvalidConfig.NoName=\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430. \u0418\u043c\u044f \u0443\u0437\u043b\u0430 \u043f\u0443\u0441\u0442\u043e. -Slave.InvalidConfig.NoRemoteDir=\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 {0}. \u041d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f. -Slave.Launching={0} \u0417\u0430\u043f\u0443\u0441\u043a \u0430\u0433\u0435\u043d\u0442\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 -Slave.Terminated={0} \u0410\u0433\u0435\u043d\u0442 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d -Slave.UnableToLaunch= \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 {0} {1} -Slave.UnixSlave=\u0423\u0437\u0435\u043b \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c Unix -Slave.WindowsSlave=\u0423\u0437\u0435\u043b \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c Windows View.Permissions.Title=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 Permalink.LastBuild=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0431\u043e\u0440\u043a\u0430 diff --git a/core/src/main/resources/hudson/model/Messages_sv_SE.properties b/core/src/main/resources/hudson/model/Messages_sv_SE.properties index 278c419304..6376d4e09d 100644 --- a/core/src/main/resources/hudson/model/Messages_sv_SE.properties +++ b/core/src/main/resources/hudson/model/Messages_sv_SE.properties @@ -5,3 +5,5 @@ Job.Pronoun=Projekt ManageJenkinsAction.DisplayName=Hantera Jenkins ParametersDefinitionProperty.DisplayName=Detta bygge \u00E4r parametriserat + +FreeStyleProject.Description=Detta \u00E4r en central del i Jenkins. Jenkins kommer att bygga ditt projekt med valfri versionshanterare och med vilket byggsystem som helst, och detta kan \u00E4ven anv\u00E4ndas f\u00F6r n\u00E5got annat \u00E4n mjukvarubyggen. diff --git a/core/src/main/resources/hudson/model/Messages_tr.properties b/core/src/main/resources/hudson/model/Messages_tr.properties index 2d3aaf2179..ee48426b3b 100644 --- a/core/src/main/resources/hudson/model/Messages_tr.properties +++ b/core/src/main/resources/hudson/model/Messages_tr.properties @@ -45,12 +45,16 @@ BallColor.Pending=Bekliyor BallColor.Success=Ba\u015far\u0131l\u0131 BallColor.Unstable=Dengesiz -Computer.Caption=Slave {0} Executor.NotAvailable=Mevcut De\u011fil FreeStyleProject.DisplayName=Serbest-stil yaz\u0131l\u0131m projesi yap\u0131land\u0131r +FreeStyleProject.Description=\ + Jenkins''\u0131n merkezi \u00f6zelli\u011fi, projelerinizi yap\u0131land\u0131rman\u0131za yard\u0131m etmesidir. Bu proje t\u00fcr\u00fcn\u00fc kullanarak, \ + herhangi bir yap\u0131land\u0131rma sistemini herhangi bir Kaynak Kodu Y\u00f6netimi arac\u0131 ile birle\u015ftirebilirsiniz,\ + ve hatta yaz\u0131l\u0131m yap\u0131land\u0131rman\u0131n d\u0131\u015f\u0131nda ba\u015fka t\u00fcr projeler i\u00e7in dahi kullanabilirsiniz. + Hudson.BadPortNumber=Yanl\u0131\u015f Port Numaras\u0131 {0} Hudson.Computer.Caption=Master @@ -87,14 +91,6 @@ Run.MarkedExplicitly=kayd\u0131 tutmak i\u00e7in d\u0131\u015far\u0131dan i\u015 Run.Permissions.Title=\u00c7al\u0131\u015ft\u0131r Run.UnableToDelete={0} silinemiyor: {1} -Slave.InvalidConfig.Executors={0} i\u00e7in ge\u00e7ersiz slave konfig\u00fcrasyonu. Ge\u00e7ersiz yap\u0131land\u0131r\u0131c\u0131 say\u0131s\u0131. -Slave.InvalidConfig.NoName=Ge\u00e7ersiz slave konfig\u00fcrasyonu. \u0130sim bo\u015f. -Slave.InvalidConfig.NoRemoteDir={0} i\u00e7in ge\u00e7ersiz slave konfig\u00fcrasyonu. Uzak dizin verilmedi. -Slave.Launching={0} slave ajan\u0131 \u00e7al\u0131\u015ft\u0131r\u0131yor -Slave.Terminated={0} slave ajan\u0131 sonland\u0131r\u0131ld\u0131 -Slave.UnableToLaunch={0} y\u00fcz\u00fcnden slave ajan\u0131 \u00e7al\u0131\u015ft\u0131r\u0131lamad\u0131 {1} -Slave.UnixSlave=Bu bir unix slave -Slave.WindowsSlave=Bu bir windows slave View.Permissions.Title=G\u00f6r\u00fcnt\u00fc Permalink.LastBuild=Son yap\u0131land\u0131rma diff --git a/core/src/main/resources/hudson/model/Messages_uk.properties b/core/src/main/resources/hudson/model/Messages_uk.properties index e48bfb0375..59c4b0bc96 100644 --- a/core/src/main/resources/hudson/model/Messages_uk.properties +++ b/core/src/main/resources/hudson/model/Messages_uk.properties @@ -1 +1,3 @@ ParametersDefinitionProperty.DisplayName=\u0426\u044F \u0431\u0443\u0434\u043E\u0432\u0430 \u043C\u0430\u0454 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438 + +FreeStyleProject.Description=\u0426\u0435 - \u043E\u0441\u043D\u043E\u0432\u043D\u0430 \u0432\u0456\u0434\u043C\u0456\u043D\u043D\u0456\u0441\u0442\u044C Jenkins. Jenkins \u043F\u043E\u0431\u0443\u0434\u0443\u0454 \u0432\u0430\u0448 \u043F\u0440\u043E\u0435\u043A\u0442, \u043A\u043E\u043C\u0431\u0456\u043D\u0443\u044E\u0447\u0438 \u0431\u0443\u0434\u044C-\u044F\u043A\u0456 \u0441\u0438\u0441\u0442\u0435\u043C\u0438 \u0443\u043F\u0440\u0430\u0432\u043B\u0456\u043D\u043D\u044F \u043A\u043E\u0434\u043E\u043C \u0437 \u0431\u0443\u0434\u044C-\u044F\u043A\u0438\u043C\u0438 \u0441\u0438\u0441\u0442\u0435\u043C\u0430\u043C\u0438 \u0437\u0431\u0456\u0440\u043A\u0438, \u0449\u043E \u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043E \u043D\u0430\u0432\u0456\u0442\u044C \u0434\u043B\u044F \u0446\u0456\u043B\u0435\u0439 \u0432\u0456\u0434\u043C\u0456\u043D\u043D\u0438\u0445 \u0432\u0456\u0434 \u0437\u0431\u0456\u0440\u043A\u0438 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043D\u043E\u0433\u043E \u0437\u0430\u0431\u0435\u0437\u043F\u0435\u0447\u0435\u043D\u043D\u044F. \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Messages_zh_CN.properties b/core/src/main/resources/hudson/model/Messages_zh_CN.properties index add4006a2c..15d419d1f9 100644 --- a/core/src/main/resources/hudson/model/Messages_zh_CN.properties +++ b/core/src/main/resources/hudson/model/Messages_zh_CN.properties @@ -67,20 +67,13 @@ CLI.connect-node.shortDescription=Reconnect to a node CLI.online-node.shortDescription=Resume using a node for performing builds, to cancel out the earlier "offline-node" command. CLI.offline-node.shortDescription=Stop using a node for performing builds temporarily, until the next "online-node" command. -Computer.Caption=Slave {0} -Computer.Permissions.Title=Slave -Computer.ConfigurePermission.Description=This permission allows users to configure slaves. -Computer.DeletePermission.Description=This permission allows users to delete existing slaves. -Computer.BadChannel=Slave node offline or not a remote channel (such as master node). -ComputerSet.NoSuchSlave=No such slave: {0} -ComputerSet.SlaveAlreadyExists=Slave called ''{0}'' already exists -ComputerSet.SpecifySlaveToCopy=Specify which slave to copy ComputerSet.DisplayName=nodes Executor.NotAvailable=N/A FreeStyleProject.DisplayName=\u6784\u5efa\u4e00\u4e2a\u81ea\u7531\u98ce\u683c\u7684\u8f6f\u4ef6\u9879\u76ee +FreeStyleProject.Description=\u8FD9\u662FJenkins\u7684\u4E3B\u8981\u529F\u80FD.Jenkins\u5C06\u4F1A\u7ED3\u5408\u4EFB\u4F55SCM\u548C\u4EFB\u4F55\u6784\u5EFA\u7CFB\u7EDF\u6765\u6784\u5EFA\u4F60\u7684\u9879\u76EE, \u751A\u81F3\u53EF\u4EE5\u6784\u5EFA\u8F6F\u4EF6\u4EE5\u5916\u7684\u7CFB\u7EDF. HealthReport.EmptyString= @@ -168,16 +161,8 @@ Run.Summary.BrokenSinceThisBuild=broken since this build Run.Summary.BrokenSince=broken since build {0} Run.Summary.Unknown=? -Slave.InvalidConfig.Executors=Invalid slave configuration for {0}. Invalid # of executors. -Slave.InvalidConfig.NoName=Invalid slave configuration. Name is empty -Slave.InvalidConfig.NoRemoteDir=Invalid slave configuration for {0}. No remote directory given -Slave.Launching={0} Launching slave agent Slave.Network.Mounted.File.System.Warning=Are you sure you want to use network mounted file system for FS root? Note that this directory does not need to be visible to the master. Slave.Remote.Director.Mandatory=Remote directory is mandatory -Slave.Terminated={0} slave agent was terminated -Slave.UnableToLaunch=Unable to launch the slave agent for {0}{1} -Slave.UnixSlave=This is a Unix slave -Slave.WindowsSlave=This is a Windows slave View.Permissions.Title=View View.CreatePermission.Description=\ @@ -211,7 +196,6 @@ UpdateCenter.PluginCategory.post-build=Other Post-Build Actions UpdateCenter.PluginCategory.report=Build Reports UpdateCenter.PluginCategory.scm=Source Code Management UpdateCenter.PluginCategory.scm-related=Source Code Management related -UpdateCenter.PluginCategory.slaves=Slave Launchers and Controllers UpdateCenter.PluginCategory.trigger=Build Triggers UpdateCenter.PluginCategory.ui=User Interface UpdateCenter.PluginCategory.upload=Artifact Uploaders diff --git a/core/src/main/resources/hudson/model/Messages_zh_TW.properties b/core/src/main/resources/hudson/model/Messages_zh_TW.properties index 80bb8d071b..9109aa1f54 100644 --- a/core/src/main/resources/hudson/model/Messages_zh_TW.properties +++ b/core/src/main/resources/hudson/model/Messages_zh_TW.properties @@ -29,7 +29,6 @@ AbstractBuild.KeptBecause=\u56e0\u70ba {0} \u800c\u4fdd\u7559 AbstractItem.NoSuchJobExists=\u6c92\u6709 ''{0}'' \u4f5c\u696d\u3002\u60a8\u6307\u7684\u662f ''{1}'' \u55ce? AbstractItem.Pronoun=\u4f5c\u696d -AbstractProject.AssignedLabelString_NoMatch_DidYouMean=\u6c92\u6709\u7b26\u5408\u7684\u7bc0\u9ede\u3002\u60a8\u60f3\u7684\u8a72\u4e0d\u6703\u662f ''{1}''\uff0c\u800c\u4e0d\u662f ''{0}'' \u5427? AbstractProject.NewBuildForWorkspace=\u6311\u500b\u6642\u9593\u5efa\u7f6e\uff0c\u5c31\u80fd\u7522\u751f\u5de5\u4f5c\u5340\u3002 AbstractProject.AwaitingBuildForWorkspace=\u7b49\u5019\u5efa\u7f6e\u7522\u51fa\u5de5\u4f5c\u5340\u3002 AbstractProject.Pronoun=\u5c08\u6848 @@ -61,7 +60,6 @@ AbstractProject.CancelPermission.Description=\ \u6388\u8207\u53d6\u6d88\u5efa\u7f6e\u7684\u80fd\u529b\u3002 AbstractProject.AssignedLabelString.InvalidBooleanExpression=\ \u7121\u6548\u7684\u5e03\u6797\u8868\u793a\u5f0f: {0} -AbstractProject.AssignedLabelString.NoMatch=\ \u6c92\u6709\u7b26\u5408\u7684\u7bc0\u9ede AbstractProject.CustomWorkspaceEmpty=\u81ea\u8a02\u5de5\u4f5c\u5340\u662f\u7a7a\u7684\u3002 @@ -87,19 +85,7 @@ CLI.offline-node.shortDescription=\u66ab\u6642\u4e0d\u4f7f\u7528\u6307\u5b9a\u7b CLI.wait-node-online.shortDescription=\u7b49\u5019\u6307\u5b9a\u7bc0\u9ede\u4e0a\u7dda\u3002 CLI.wait-node-offline.shortDescription=\u7b49\u5019\u6307\u5b9a\u7bc0\u9ede\u96e2\u7dda\u3002 -Computer.Caption=Slave {0} -Computer.NoSuchSlaveExists=\u6c92\u6709 Slave "{0}"\u3002\u60a8\u6307\u7684\u662f "{1}" \u55ce? -Computer.Permissions.Title=Slave -Computer.ConfigurePermission.Description=\u6388\u8207\u8a2d\u5b9a Slave \u7684\u6b0a\u9650\u3002 -Computer.DeletePermission.Description=\u6388\u8207\u522a\u9664\u65e2\u6709 Slave \u7684\u6b0a\u9650\u3002 -Computer.CreatePermission.Description=\u6388\u8207\u4f7f\u7528\u8005\u5efa\u7acb Slave \u7684\u6b0a\u9650\u3002 -Computer.ConnectPermission.Description=\u6388\u8207\u4f7f\u7528\u8005\u9023\u7dda\u5230 Slave \u6216\u662f\u5c07\u5176\u8a2d\u70ba\u4e0a\u7dda\u7684\u6b0a\u9650\u3002 -Computer.DisconnectPermission.Description=\u6388\u8207\u4f7f\u7528\u8005\u4e2d\u65b7 Slave \u9023\u7dda\uff0c\u6216\u5c07\u5176\u6a19\u793a\u70ba\u66ab\u6642\u96e2\u7dda\u3002 -Computer.BadChannel=Slave \u7bc0\u9ede\u96e2\u7dda\u6216\u4e0d\u662f\u9060\u7aef\u901a\u9053 (\u4f8b\u5982 Master \u7bc0\u9ede)\u3002 -ComputerSet.NoSuchSlave=\u6c92\u6709 Slave: {0} -ComputerSet.SlaveAlreadyExists=\u5df2\u7d93\u6709\u53eb\u505a ''{0}'' \u7684 Slave \u4e86 -ComputerSet.SpecifySlaveToCopy=\u6307\u5b9a\u8981\u8907\u88fd\u7684 Slave ComputerSet.DisplayName=\u7bc0\u9ede Descriptor.From=(from {0}) @@ -108,6 +94,11 @@ Executor.NotAvailable=N/A FreeStyleProject.DisplayName=\u5efa\u7f6e Free-Style \u8edf\u9ad4\u5c08\u6848 +FreeStyleProject.Description=\ + \u9019\u662f Jenkins \u7684\u4e3b\u8981\u529f\u80fd\u3002\ + Jenkins \u80fd\u642d\u914d\u5404\u5f0f\u7a0b\u5f0f\u78bc\u7ba1\u7406\u3001\u5efa\u7f6e\u7cfb\u7d71\u4f86\u5efa\u7f6e\u60a8\u7684\u5c08\u6848\uff0c\ + \u751a\u81f3\u9084\u80fd\u505a\u8edf\u9ad4\u5efa\u7f6e\u4ee5\u5916\u7684\u5176\u4ed6\u4e8b\u60c5\u3002 + Hudson.BadPortNumber=\u9023\u63a5\u57e0\u865f {0} \u7121\u6548 Hudson.Computer.Caption=Master @@ -211,16 +202,8 @@ Run.Summary.BrokenSinceThisBuild=\u5f9e\u9019\u6b21\u5efa\u7f6e\u958b\u59cb\u721 Run.Summary.BrokenSince=\u5f9e {0} \u6b21\u5efa\u7f6e\u958b\u59cb\u721b\u4e86 Run.Summary.Unknown=? -Slave.InvalidConfig.Executors=Slave {0} \u8a2d\u5b9a\u932f\u8aa4\u3002\u57f7\u884c\u7a0b\u5f0f\u6578\u7121\u6548\u3002 -Slave.InvalidConfig.NoName=Slave \u8a2d\u5b9a\u932f\u8aa4\u3002\u6c92\u6709\u6307\u5b9a\u540d\u7a31\u3002 -Slave.InvalidConfig.NoRemoteDir=Slave {0} \u8a2d\u5b9a\u932f\u8aa4\u3002\u6c92\u6709\u6307\u5b9a\u9060\u7aef\u76ee\u9304\u3002 -Slave.Launching={0} \u555f\u52d5 Slave \u4ee3\u7406\u7a0b\u5f0f Slave.Network.Mounted.File.System.Warning=\u60a8\u78ba\u5b9a\u8981\u4f7f\u7528\u7db2\u8def\u639b\u8f09\u7684\u6a94\u6848\u7cfb\u7d71\u505a\u70ba\u6839\u76ee\u9304\u55ce? \u9019\u500b\u76ee\u9304 Master \u4e0d\u9700\u8981\u8b93\u76f4\u63a5\u5b58\u53d6\u5594\u3002 Slave.Remote.Director.Mandatory=\u4e00\u5b9a\u8981\u6307\u5b9a\u9060\u7aef\u76ee\u9304 -Slave.Terminated={0} Slave \u4ee3\u7406\u7a0b\u5f0f\u5df2\u7d50\u675f -Slave.UnableToLaunch=\u7121\u6cd5\u555f\u52d5 Slave {0} \u7684\u4ee3\u7406\u7a0b\u5f0f{1} -Slave.UnixSlave=\u9019\u662f Unix slave -Slave.WindowsSlave=\u9019\u662f Windows slave View.Permissions.Title=\u8996\u666f View.CreatePermission.Description=\ @@ -259,7 +242,6 @@ UpdateCenter.PluginCategory.post-build=\u5176\u4ed6\u5efa\u7f6e\u5f8c\u52d5\u4f5 UpdateCenter.PluginCategory.report=\u5efa\u7f6e\u5831\u8868 UpdateCenter.PluginCategory.scm=\u539f\u59cb\u78bc\u7ba1\u7406 UpdateCenter.PluginCategory.scm-related=\u539f\u59cb\u78bc\u7ba1\u7406\u76f8\u95dc -UpdateCenter.PluginCategory.slaves=Slave \u555f\u52d5\u53ca\u63a7\u5236\u7a0b\u5f0f UpdateCenter.PluginCategory.trigger=\u5efa\u7f6e\u89f8\u767c\u7a0b\u5e8f UpdateCenter.PluginCategory.ui=\u4f7f\u7528\u8005\u4ecb\u9762 UpdateCenter.PluginCategory.upload=\u6210\u54c1\u4e0a\u50b3 diff --git a/core/src/main/resources/hudson/model/Node/help-labelString.html b/core/src/main/resources/hudson/model/Node/help-labelString.html index d6951e220f..a7cfc252c1 100644 --- a/core/src/main/resources/hudson/model/Node/help-labelString.html +++ b/core/src/main/resources/hudson/model/Node/help-labelString.html @@ -1,11 +1,23 @@
    - Labels (AKA tags) are used for grouping multiple slaves into one logical group. - Use spaces between each label. For instance 'regression java6' will assign a - node the labels 'regression' and 'java6'. - + Labels (or tags) are used to group multiple agents into one logical group.

    - For example, if you have multiple Windows slaves and you have jobs that require - Windows, then you can configure all your Windows slaves to have the label 'windows', - then tie the job to the 'windows' label. This allows your job to run on any - of your Windows slaves but not on anywhere else. -

    \ No newline at end of file + For example, if you have multiple Windows agents and you have a job that + must run on Windows, then you could configure all your Windows agents to have + the label windows, and then tie that job to this label. +
    + This would ensure that your job runs on one of your Windows agents, but not on + any agents without this label. +

    + Labels do not necessarily have to represent the operating system on the agent; + you can also use labels to note the CPU architecture, or that a certain tool + is installed on the agent. +

    + Multiple labels must be separated by a space. For example, + windows docker would assign two labels to the agent: windows + and docker. +

    + Labels may contain any non-space characters, but you should avoid special + characters such as any of these: !&|<>(), as other Jenkins + features allow for defining label expressions, where these characters may be + used. + diff --git a/core/src/main/resources/hudson/model/Node/help-labelString_de.html b/core/src/main/resources/hudson/model/Node/help-labelString_de.html deleted file mode 100644 index 10fc53a877..0000000000 --- a/core/src/main/resources/hudson/model/Node/help-labelString_de.html +++ /dev/null @@ -1,11 +0,0 @@ -

    - Gruppen (auch: Labels oder Tags) werden benutzt, um mehrere Slave-Knoten in eine - logische Gruppe zusammenzufassen. Die Angabe 'regression java6' ordnet beispielsweise - einen Knoten den Gruppen 'regression' und 'java6' zu. -

    - Beispiel: Sie haben mehrere Slave-Knoten unter Windows und einen Job, der Windows - erfordert. Sie können dann alle Ihre Windows-Slave-Knoten unter der Gruppe - "windows" zusammenfassen und den Job an die Gruppe "windows" binden. - Dadurch kann Ihr Job jedem der Windows-Slave-Knoten zugewiesen werden - aber - keinem anderen Slave-Knoten sonst. -

    \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Node/help-labelString_pt_BR.html b/core/src/main/resources/hudson/model/Node/help-labelString_pt_BR.html deleted file mode 100644 index 685874ebc9..0000000000 --- a/core/src/main/resources/hudson/model/Node/help-labelString_pt_BR.html +++ /dev/null @@ -1,9 +0,0 @@ -
    - Marcações também são usadas para agrupar múltiplos slaves em um grupo lógico. - -

    - Por exemplo, se você tem múltiplos slaves Windows e você tem tarefas que requerem - Windows, então você pode configurar todos seus slaves Windows para ter a marcação 'windows', - então amarre a tarefa à marcação 'windows'. Isto permite que sua tarefa executar apenas - nos seus slaves Windows. -

    diff --git a/core/src/main/resources/hudson/model/Node/help-labelString_tr.html b/core/src/main/resources/hudson/model/Node/help-labelString_tr.html deleted file mode 100644 index bdd2019e65..0000000000 --- a/core/src/main/resources/hudson/model/Node/help-labelString_tr.html +++ /dev/null @@ -1,11 +0,0 @@ -
    - Etiketler (diğer adıyla tag'ler) birden fazla slave'i mantıklı bir grup içinde birleştirmek - için kullanılır. - -

    - Mesela, birden fazla Windows slave'iniz varsa ve bazı işlerinizin Windows üzerinde çalışması - gerekiyorsa, bu durumda Windows slave'lerini 'windows' etiketi ile birleştirip, çalıştırmak - istediğiniz işe, çalışacağı yer olarak 'windows' etiketini vermeniz yeterli olacaktır. - Ayarlarınızı bu şekilde yaparsanız, istediğiniz işler, windows slave'lerinden başka yerde - çalıştırılmayacaktır. -

    \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Node/help-labelString_zh_TW.html b/core/src/main/resources/hudson/model/Node/help-labelString_zh_TW.html deleted file mode 100644 index 0e3a303930..0000000000 --- a/core/src/main/resources/hudson/model/Node/help-labelString_zh_TW.html +++ /dev/null @@ -1,9 +0,0 @@ -
    - 標籤可以將多個 Slave 進行邏輯分類。 - 不同的標籤之間請以空格隔開。例如 'regression java6' 代表將節點貼上 'regression' 跟 'java6' 兩個標籤。 - -

    - 舉例來說,如果您有多部 Windows 的 Slave,而且有只能在 Windows 平台上跑的作業, - 那麼就可以把這些 Windows Slave 標上 'windows' 標籤,並將作業限定成只能在 'windows' 標籤上跑。 - 這麼一來,您的作業就只能在 Windows 的 Slave 上面跑。 -

    \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Node/help-name.html b/core/src/main/resources/hudson/model/Node/help-name.html index dd66b5aa64..aa412606d4 100644 --- a/core/src/main/resources/hudson/model/Node/help-name.html +++ b/core/src/main/resources/hudson/model/Node/help-name.html @@ -1,7 +1,10 @@
    - Name that uniquely identifies a slave within this Jenkins installation. - + Name that uniquely identifies an agent within this Jenkins installation.

    - This value could be any string, and doesn't have to be the same as the slave host name, - but it's often convenient to make them the same. + This does not have to be the same as the agent hostname (where applicable), + but it is often convenient to make them the same. +

    + The name may not contain any characters from this list: + ?*/\%!@#$^&|<>[]:; +

    diff --git a/core/src/main/resources/hudson/model/Node/help-name_de.html b/core/src/main/resources/hudson/model/Node/help-name_de.html deleted file mode 100644 index ce4e888b20..0000000000 --- a/core/src/main/resources/hudson/model/Node/help-name_de.html +++ /dev/null @@ -1,8 +0,0 @@ -
    - Name, der einen Slave-Knoten eindeutig innerhalb dieser Jenkins-Installation identifiziert. - -

    - Dieser Wert kann zwar beliebig gewählt werden und muß nicht zwingend mit dem Rechnernamen - des Slave-Knoten übereinstimmen - aber in vielen Fällen ist diese einfache Konvention - sehr praktisch. -

    diff --git a/core/src/main/resources/hudson/model/Node/help-name_pt_BR.html b/core/src/main/resources/hudson/model/Node/help-name_pt_BR.html deleted file mode 100644 index 3be3f19567..0000000000 --- a/core/src/main/resources/hudson/model/Node/help-name_pt_BR.html +++ /dev/null @@ -1,7 +0,0 @@ -
    - Nome que identifica unicamente um slave dentro deste instalação do Jenkins. - -

    - Este valor poderia ser qualquer string, e não tem que ser o mesmo nome do host slave, - mas é conveniente mantê-los iguais. -

    diff --git a/core/src/main/resources/hudson/model/Node/help-name_tr.html b/core/src/main/resources/hudson/model/Node/help-name_tr.html deleted file mode 100644 index 7aff93778f..0000000000 --- a/core/src/main/resources/hudson/model/Node/help-name_tr.html +++ /dev/null @@ -1,7 +0,0 @@ -
    - İsim, slave'e içerisinde bulunduğu Jenkins'da belirleyici bir tanım verir. - -

    - Bu değer bir string olabilir, ve host ismi ile aynı olmak zorunda değildir, ama anlamlı - olması için aynı vermek bazen uygun olabilir. -

    diff --git a/core/src/main/resources/hudson/model/Node/help-name_zh_TW.html b/core/src/main/resources/hudson/model/Node/help-name_zh_TW.html deleted file mode 100644 index 3952c09cdb..0000000000 --- a/core/src/main/resources/hudson/model/Node/help-name_zh_TW.html +++ /dev/null @@ -1,6 +0,0 @@ -
    - 在 Jenkins 中能亳無疑問識別出這個 Slave 的名稱。 - -

    - 名稱可以隨便您取。雖然不一定要是 Slave 的主機名稱,但是設成跟主機名稱一樣會比較方便。 -

    diff --git a/core/src/main/resources/hudson/model/Node/help-numExecutors.html b/core/src/main/resources/hudson/model/Node/help-numExecutors.html index f8dd8a46a9..6e23a37a77 100644 --- a/core/src/main/resources/hudson/model/Node/help-numExecutors.html +++ b/core/src/main/resources/hudson/model/Node/help-numExecutors.html @@ -1,15 +1,18 @@
    - This controls the number of concurrent builds that Jenkins can perform. So the value - affects the overall system load Jenkins may incur. - A good value to start with would be the number of processors on your system. - + The maximum number of concurrent builds that Jenkins may perform on this + agent.

    - Increasing this value beyond that would cause each build to take longer, but it could increase - the overall throughput, because it allows CPU to build one project while another build is waiting - for I/O. - + A good value to start with would be the number of CPU cores on the machine. + Setting a higher value would cause each build to take longer, but could + increase the overall throughput. For example, one build might be CPU-bound, + while a second build running at the same time might be I/O-bound — so + the second build could take advantage of the spare I/O capacity at that + moment.

    - When using Jenkins in the master/slave mode, setting this value to 0 would prevent the master - from doing any building on its own. Slaves may not have zero executors, but may be - temporarily disabled using the button on the slave's status page. + Agents must have at least one executor. To temporarily prevent any builds from + being executed on an agent, use the Mark this node temporarily offline + button on the agent's page. +

    + This does not apply to the Jenkins master — setting the number of + executors to zero will prevent any builds from being executed on the master.

    diff --git a/core/src/main/resources/hudson/model/Node/help-numExecutors_de.html b/core/src/main/resources/hudson/model/Node/help-numExecutors_de.html deleted file mode 100644 index f9427704b5..0000000000 --- a/core/src/main/resources/hudson/model/Node/help-numExecutors_de.html +++ /dev/null @@ -1,19 +0,0 @@ -
    - Diese Einstellung legt die Anzahl gleichzeitiger Build-Prozesse in Jenkins fest. - Sie beeinflusst daher die Gesamtlast, die Jenkins auf einem System erzeugen kann. - Ein guter Ausgangspunkt wäre die Anzahl der CPUs Ihres Systems. - -

    - - Eine Erhöhung der Anzahl über diesen Wert hinaus würde zunächst die einzelnen Builds - verlängern, könnte aber insgesamt den Durchsatz erhöhen, weil es den CPUs erlaubt, - an einem Build zu rechnen, während ein anderer Build wegen Ein-/Ausgabeoperationen - wartet. - -

    - - Falls Jenkins im Master/Slave-Modus betrieben wird, legt ein Wert von 0 auf dem Master - fest, daß ausschließlich auf den Slaves Build-Prozesse durchgeführt werden, nie aber - auf dem Master selbst. Slaves müssen mindestens 1 Build-Prozessor bereitstellen, können - aber temporär durch eine Schaltfläche auf der Statusseite des Slaves deaktiviert werden. -

    diff --git a/core/src/main/resources/hudson/model/Node/help-numExecutors_pt_BR.html b/core/src/main/resources/hudson/model/Node/help-numExecutors_pt_BR.html deleted file mode 100644 index 01b4537b2f..0000000000 --- a/core/src/main/resources/hudson/model/Node/help-numExecutors_pt_BR.html +++ /dev/null @@ -1,13 +0,0 @@ -
    - Isto controla o número de construções concorrentes que o Jenkins pode executar. Assim o valor - afeta toda a carga do sistema que o Jenkins pode sustentar. - Um bom valor para iniciar seria o número de processadores em seu sistema. - - Aumentando este valor além disso pode causar lentidão na construção, mas também pode aumentar - a capacidade total, porque permite a CPU construir um projeto enquanto uma outra construção - está aguardando por operação de E/S. - -

    - Quando usando o Jenkins no modo master/slave, atribuir este valor a 0 evitará que o master - faça qualquer construção nele mesmo. -

    diff --git a/core/src/main/resources/hudson/model/Node/help-numExecutors_tr.html b/core/src/main/resources/hudson/model/Node/help-numExecutors_tr.html deleted file mode 100644 index cef65e409c..0000000000 --- a/core/src/main/resources/hudson/model/Node/help-numExecutors_tr.html +++ /dev/null @@ -1,14 +0,0 @@ -
    - Jenkins'ın bu slave üzerinde eş zamanlı kaç tane yapılandırma yürütebileceğini kontrol eder. - Yani, buraya girilecek değer, Jenkins'ın ne kadar yüke maruz kalacağını belirler. - Başlangıç için, işlemci sayısı iyi bir rakam olabilir. - -

    - Bu sayıyı artırmak, yapılandırmaların daha uzun sürmesine yol açsa da, toplam üretim kapasitesinde bir - artış sağlayacaktır, çünkü bu durum, bir yapılandırma I/O için beklerken, CPU'nun başka bir yapılandırma - ile uğraşmasına yol açacaktır. - -

    - Bu değeri 0 yapmak, Jenkins'ın, konfigürasyonunu kaybetmeden, devre dışı bırakılmış bir slave'i - silmesine olanak tanır. -

    diff --git a/core/src/main/resources/hudson/model/Node/help-numExecutors_zh_TW.html b/core/src/main/resources/hudson/model/Node/help-numExecutors_zh_TW.html deleted file mode 100644 index fd7b2ade67..0000000000 --- a/core/src/main/resources/hudson/model/Node/help-numExecutors_zh_TW.html +++ /dev/null @@ -1,12 +0,0 @@ -
    - 控制 Jenkins 可以同時執行的建置數,可能會對 Jenkins 整體負載造成影響。 - 如果不知道該怎麼調整,建議您先設成跟系統處理器數目一樣的值。 - -

    - 增加這個值可能會讓每一次建置都變慢,但是可以增加整體處理效率。 - 因為專案在等候 I/O 時,CPU 還是能建置其他專案。 - -

    - 以 Master/Slave 模式使用 Jenkins 時,設定成 0 可以讓 Master 不要自己建置專案。 - Slave 應該不會半個執行程式都沒有,如果您想要暫時停用該 Slave 的話,可以透過它狀態頁中的按鈕達成。 -

    diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/help.html b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/help.html index a89669c4c5..496799b63e 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/help.html +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/help.html @@ -1,14 +1,36 @@
    - When you are using Jenkins for various automations, it's sometimes convenient - to be able to "parameterize" a build, by requiring a set of user inputs to - be made available to the build process. For example, you might be setting up - an on-demand test job, where the user can submit a zip file of the binaries to be tested. - -

    - This section configures what parameters your build takes. Parameters are distinguished - by their names, and so you can have multiple parameters provided that they have different names. - -

    - See the Wiki topic - for more discussions about this feature. + Parameters allow you to prompt users for one or more inputs that will be + passed into a build. For example, you might have a project that runs tests on + demand by allowing users to upload a zip file with binaries to be tested. + This could be done by adding a File Parameter here. +
    + Or you might have a project that releases some software, and you want users to + enter release notes that will be uploaded along with the software. This could + be done by adding a Multi-line String Parameter here. +

    + Each parameter has a Name and some sort of Value, depending on + the parameter type. These name-value pairs will be exported as environment + variables when the build starts, allowing subsequent parts of the build + configuration (such as build steps) to access those values, e.g. by using the + ${PARAMETER_NAME} syntax (or %PARAMETER_NAME% on Windows). +
    + This also implies that each parameter defined here should have a unique + Name. +

    + When a project is parameterized, the usual Build Now link will be + replaced with a Build with Parameters link, where users will be + prompted to specify values for each of the defined parameters. If they choose + not to enter anything, the build will start with the default value for each + parameter. +

    + If a build is started automatically, for example if started by an SCM trigger, + the default values for each parameter will be used. +

    + When a parameterized build is in the queue, attempting to start another build + of the same project will only succeed if the parameter values are different, + or if the Execute concurrent builds if necessary option is enabled. +

    + See the Parameterized Builds wiki page for more information about + this feature.

    diff --git a/core/src/main/resources/hudson/model/Slave/help-launcher.jelly b/core/src/main/resources/hudson/model/Slave/help-launcher.jelly index 7b80362ec3..c9156b09fd 100644 --- a/core/src/main/resources/hudson/model/Slave/help-launcher.jelly +++ b/core/src/main/resources/hudson/model/Slave/help-launcher.jelly @@ -26,7 +26,7 @@ THE SOFTWARE.
    - ${%Controls how Jenkins starts this slave.} + ${%Controls how Jenkins starts this agent.}
    diff --git a/core/src/main/resources/hudson/model/Slave/help-launcher_da.properties b/core/src/main/resources/hudson/model/Slave/help-launcher_da.properties deleted file mode 100644 index 15f2e396ca..0000000000 --- a/core/src/main/resources/hudson/model/Slave/help-launcher_da.properties +++ /dev/null @@ -1,23 +0,0 @@ -# The MIT License -# -# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -Controls\ how\ Jenkins\ starts\ this\ slave.=Styrer hvordan Jenkins starter denne slave. diff --git a/core/src/main/resources/hudson/model/Slave/help-launcher_de.properties b/core/src/main/resources/hudson/model/Slave/help-launcher_de.properties deleted file mode 100644 index dc586b7e4b..0000000000 --- a/core/src/main/resources/hudson/model/Slave/help-launcher_de.properties +++ /dev/null @@ -1 +0,0 @@ -Controls\ how\ Jenkins\ starts\ this\ slave.=Steuert, wie Jenkins den Slave-Knoten startet. diff --git a/core/src/main/resources/hudson/model/Slave/help-launcher_es.properties b/core/src/main/resources/hudson/model/Slave/help-launcher_es.properties index bb2e5e2309..94f86e708e 100644 --- a/core/src/main/resources/hudson/model/Slave/help-launcher_es.properties +++ b/core/src/main/resources/hudson/model/Slave/help-launcher_es.properties @@ -20,4 +20,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Controls\ how\ Jenkins\ starts\ this\ slave.=Controla cómo Jenkins inicia este esclavo. +Controls\ how\ Jenkins\ starts\ this\ agent.=Controla como Jenkins inicia este agente. diff --git a/core/src/main/resources/hudson/model/Slave/help-launcher_fr.properties b/core/src/main/resources/hudson/model/Slave/help-launcher_fr.properties deleted file mode 100644 index bf30272406..0000000000 --- a/core/src/main/resources/hudson/model/Slave/help-launcher_fr.properties +++ /dev/null @@ -1,23 +0,0 @@ -# The MIT License -# -# Copyright (c) 2004-2009, Sun Microsystems, Inc., Alan Harder, Eric Lefevre-Ardant -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -Controls\ how\ Jenkins\ starts\ this\ slave.=Contrôle la façon dont Jenkins démarre l''esclave. diff --git a/core/src/main/resources/hudson/model/Slave/help-launcher_ja.properties b/core/src/main/resources/hudson/model/Slave/help-launcher_ja.properties deleted file mode 100644 index 55ed67ea5f..0000000000 --- a/core/src/main/resources/hudson/model/Slave/help-launcher_ja.properties +++ /dev/null @@ -1,23 +0,0 @@ -# The MIT License -# -# Copyright (c) 2004-2009, Sun Microsystems, Inc., Seiji Sogabe -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -Controls\ how\ Jenkins\ starts\ this\ slave.=\u3053\u306E\u30B9\u30EC\u30FC\u30D6\u306E\u8D77\u52D5\u65B9\u6CD5\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002 diff --git a/core/src/main/resources/hudson/model/Slave/help-launcher_pt_BR.properties b/core/src/main/resources/hudson/model/Slave/help-launcher_pt_BR.properties deleted file mode 100644 index d02da19515..0000000000 --- a/core/src/main/resources/hudson/model/Slave/help-launcher_pt_BR.properties +++ /dev/null @@ -1,23 +0,0 @@ -# The MIT License -# -# Copyright (c) 2004-2010, Sun Microsystems, Inc., Cleiber Silva, Fernando Boaglio -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -Controls\ how\ Jenkins\ starts\ this\ slave.=Controla como o Jenkins inicia esse slave diff --git a/core/src/main/resources/hudson/model/Slave/help-launcher_tr.properties b/core/src/main/resources/hudson/model/Slave/help-launcher_tr.properties deleted file mode 100644 index c897a4126f..0000000000 --- a/core/src/main/resources/hudson/model/Slave/help-launcher_tr.properties +++ /dev/null @@ -1 +0,0 @@ -Controls\ how\ Jenkins\ starts\ this\ slave.= Jenkins'?n slave'i nas?l ba?lataca??n? kontrol eder. diff --git a/core/src/main/resources/hudson/model/Slave/help-launcher_zh_TW.properties b/core/src/main/resources/hudson/model/Slave/help-launcher_zh_TW.properties deleted file mode 100644 index 53d4c8d021..0000000000 --- a/core/src/main/resources/hudson/model/Slave/help-launcher_zh_TW.properties +++ /dev/null @@ -1,23 +0,0 @@ -# The MIT License -# -# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -Controls\ how\ Jenkins\ starts\ this\ slave.=\u63a7\u5236 Jenkins \u4f7f\u7528\u4ec0\u9ebc\u65b9\u5f0f\u555f\u52d5 Slave\u3002 diff --git a/core/src/main/resources/hudson/model/Slave/help-remoteFS.html b/core/src/main/resources/hudson/model/Slave/help-remoteFS.html index 477c19c6a0..6915c41fb3 100644 --- a/core/src/main/resources/hudson/model/Slave/help-remoteFS.html +++ b/core/src/main/resources/hudson/model/Slave/help-remoteFS.html @@ -1,36 +1,34 @@

    - A slave needs to have a directory dedicated to Jenkins. Specify - the path of this work directory on the slave. It is best to use - an absolute path, such as '/var/jenkins' or 'c:\jenkins'. This - should be a path local to the slave machine. There's no need for - this path to be visible from the master, under normal circumstances. - + An agent needs to have a directory dedicated to Jenkins. Specify + the path to this directory on the agent. It is best to use + an absolute path, such as /var/jenkins or c:\jenkins. + This should be a path local to the agent machine. There is no need for + this path to be visible from the master.

    - Slaves do not maintain important data (other than active workspaces - of projects last built on it), so you can possibly set the slave - workspace to a temporary directory. The only downside of doing this - is that you may lose the up-to-date workspace if the slave is turned off. - + Agents do not maintain important data; all job configurations, build logs and + artifacts are stored on the master, so it would be possible to use a temporary + directory as the agent root directory. +
    + However, by giving an agent a directory that is not deleted after a machine + reboot, for example, the agent can cache data such as tool installations, or + build workspaces. This prevents unnecessary downloading of tools, or checking + out source code again when builds start to run on this agent again after a + reboot.

    - If you use a relative path, such as './jenkins-slave', the path will - be relative to the current working directory that the launcher provides. + If you use a relative path, such as ./jenkins-agent, the path will be + relative to the working directory provided by the Launch method.

      -
    • For launchers where Jenkins controls starting the slave process, such +
    • For launchers where Jenkins controls starting the agent process, such as SSH, the current working directory will typically be consistent, - e.g. the user's home directory. This means that Jenkins will be able to - rely on the caching of tool installations and workspaces from previous - builds. -
    • -
    • For launchers where Jenkins has no control over starting the slave + e.g. the user's home directory.
    • +
    • For launchers where Jenkins has no control over starting the agent process, such as JNLP when launched from either the command line or via a web browser link, the current working directory may change between - launches of the slave and use of a relative path may prove problematic. + launches of the agent and use of a relative path may prove problematic. +
      The principal issue encountered when using relative paths with launchers like JNLP is the proliferation of stale workspaces and tool installation - on the slave machine. This can cause disk space issues. - Note: there are some cloud providers that specifically use relative - paths with the JNLP launcher to allow for dynamically provisioned pools - of semi-heterogeneous slaves.
    • + on the agent machine. This can cause disk space issues.
    diff --git a/core/src/main/resources/hudson/model/Slave/help-remoteFS_de.html b/core/src/main/resources/hudson/model/Slave/help-remoteFS_de.html deleted file mode 100644 index e507e71842..0000000000 --- a/core/src/main/resources/hudson/model/Slave/help-remoteFS_de.html +++ /dev/null @@ -1,16 +0,0 @@ -
    -

    - Ein Slave-Knoten benötigt ein Verzeichnis, das Jenkins exklusiv - zur Verfügung steht. Geben Sie den absoluten Pfad dieses - Arbeitsverzeichnisses auf dem Slave-Knoten an, z.B. - '/export/home/jenkins' oder 'c:\jenkins'. Dieses Verzeichnis muß unter normalen - Umständen nicht vom Master aus erreichbar sein. - -

    - Slave-Knoten speichern keine wichtigen Daten (abgesehen von den - aktiven Arbeitsbereichen derjenigen Projekte, die zuletzt auf dem - Slave-Knoten gebaut wurden). Sie können daher gefahrlos das Slave-Arbeitsverzeichnis - auf ein temporäres Verzeichnis setzen. Der einzige Nachteil dieses Vorgehens - wäre der Verlust der aktuellen Arbeitsbereiche, falls der Slave-Knoten - abgeschaltet würde. -

    diff --git a/core/src/main/resources/hudson/model/Slave/help-remoteFS_pt_BR.html b/core/src/main/resources/hudson/model/Slave/help-remoteFS_pt_BR.html deleted file mode 100644 index 5f995b42e9..0000000000 --- a/core/src/main/resources/hudson/model/Slave/help-remoteFS_pt_BR.html +++ /dev/null @@ -1,13 +0,0 @@ -div> - -

    - Um slave precisa ter um diretório dedicado ao Jenkins. Especifique - o caminho absoluto deste diretório de trabalho no slave, tal como - '/export/home/jenkins'. - -

    - Slaves não mantém dados importantes (além dos workspaces ativos - dos últimos projetos construídos neles), assim você pode configurar o - workspace do slave para um diretório temporário. A única desvantagem de fazer isto - é que você pode perder o workspace atualizado se o slave for desligado. -

    diff --git a/core/src/main/resources/hudson/model/Slave/help-remoteFS_tr.html b/core/src/main/resources/hudson/model/Slave/help-remoteFS_tr.html deleted file mode 100644 index 19357e537b..0000000000 --- a/core/src/main/resources/hudson/model/Slave/help-remoteFS_tr.html +++ /dev/null @@ -1,14 +0,0 @@ -
    - -

    - Slave'in üzerinde bir dizini, Jenkins'ın kullanımı için ayırmanız - gerekmektedir. Bu alana, bu dizinin mutlak yolunu yazmanız gerekir - ('/export/home/jenkins' gibi). Bu dizinin yolu slave makineye göredirr. Normal şartlar altında master tarafından - görünür olmasına gerek yoktur. - -

    - Slave'ler çok önemli veriler oluşturmazlar (üzerinde çalışan projelerin - aktif çalışma alanları dışında). Dolayısıyla, slave'in çalışma alanı, geçici - bir dizine ayarlanabilir. Bu şekilde yapmanın tek dezavantajı, slave çevrim - dışı olduğunda, güncel çalışma alanını kaybedebilecek olmanızdır. -

    diff --git a/core/src/main/resources/hudson/model/Slave/help-remoteFS_zh_TW.html b/core/src/main/resources/hudson/model/Slave/help-remoteFS_zh_TW.html deleted file mode 100644 index ff327c4bdd..0000000000 --- a/core/src/main/resources/hudson/model/Slave/help-remoteFS_zh_TW.html +++ /dev/null @@ -1,10 +0,0 @@ -
    -

    - Slave 上要有 Jenkins 專用的目錄。 - 請指定這個工作目錄在 Slave 上的完整路徑,例如 '/var/jenkins' 或是 'c:\jenkins'。 - Master 不用直接存取到這個路徑。 - -

    - Slave 上不會儲存重要資訊 (只會存最近建置專案的工作區),所以您也可以把 Slave 工作區設在暫存目錄裡。 - 唯一的缺點是當 Slave 停掉時,您可能會看不到工作區的最新內容。 -

    diff --git a/core/src/main/resources/hudson/model/UpdateCenter/sidepanel.jelly b/core/src/main/resources/hudson/model/UpdateCenter/sidepanel.jelly index 3880cfa74c..5f9d40194f 100644 --- a/core/src/main/resources/hudson/model/UpdateCenter/sidepanel.jelly +++ b/core/src/main/resources/hudson/model/UpdateCenter/sidepanel.jelly @@ -32,7 +32,7 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected.html b/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected.html index 2b56cc86ac..37b1e5cc65 100644 --- a/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected.html +++ b/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected.html @@ -8,7 +8,7 @@
    • Your Jenkins version -
    • For your master and each slave, OS type, and # of executors +
    • For your master and each agent, OS type, and # of executors
    • Plugins that are installed and their versions
    • Number of jobs per each job type in your Jenkins
    diff --git a/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected_de.html b/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected_de.html deleted file mode 100644 index f3229055b6..0000000000 --- a/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected_de.html +++ /dev/null @@ -1,24 +0,0 @@ -
    - Zu wissen, wie Jenkins genutzt wird, ist ungemein hilfreich, wenn es um die Richtung der - Weiterentwicklung geht - insbesondere bei OpenSource-Projekten, bei denen die Anwender - nicht genau bekannt sind. Wenn angewählt, sendet Jenkins in Abständen Informationen über - die Nutzung dieser Instanz. -

    - Diese Informationen umfassen ausschließlich: -

      -
    • Ihre Jenkins-Version
    • -
    • Für jeden Master- und Slave-Knoten: Betriebssystem und Anzahl der Build-Prozessoren
    • -
    • Installierte Plugins und deren Version
    • -
    • Anzahl per angelegten Jobs pro Jobtyp
    • -
    - -

    - Diese Informationen enthalten nichts, was Sie identifiziert oder uns erlauben könnte, - mit Ihnen in Kontakt zu treten (außer Daten, die inhärent bei HTTP übermittelt werden, - wie beispielsweise IP-Adressen). Diese Daten werden in zusammengefasster Form als - Nutzungsstatistiken der Jenkins-Community zur Verfügung gestellt. - -

    - Lesen Sie die - Diskussion dieser Funktion in der Jenkins-Community - und steuern Sie gerne Ihre Meinung dazu bei! -

    diff --git a/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected_zh_TW.html b/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected_zh_TW.html deleted file mode 100644 index 65e59953f2..0000000000 --- a/core/src/main/resources/hudson/model/UsageStatistics/help-usageStatisticsCollected_zh_TW.html +++ /dev/null @@ -1,22 +0,0 @@ -
    - 知道大家怎麼使用 Jenkins 對發展方向有很大的助益,開放原始碼專案向來都很難追蹤使用族群。 - 啟用這個選項後,Jenkins 會定期將您的 Jenkins 使用狀況傳送回去。 - -

    - 明確來說,會送出的資訊有: - -

      -
    • 您的 Jenkins 版本 -
    • Master 及 Slave 的作業系統類型,以及執行程式數 -
    • 安裝的外掛程式名稱及其版本 -
    • Jenkins 中不同作業類型的作業數 -
    - -

    - 資訊中不會有任何可以認出您,或是能讓我們聯絡到您的資訊 - (除了 HTTP 中無可避免會揭露的 IP 位址等資訊)。送出的使用狀況統計資料表內容會與整個社群共享。 - -

    - 您可以看看 - 這個機制的社群討論內容,也歡迎您提出建言。 -

    diff --git a/core/src/main/resources/hudson/model/User/sidepanel.jelly b/core/src/main/resources/hudson/model/User/sidepanel.jelly index 126bdae5d8..46bad7a605 100644 --- a/core/src/main/resources/hudson/model/User/sidepanel.jelly +++ b/core/src/main/resources/hudson/model/User/sidepanel.jelly @@ -34,7 +34,7 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/hudson/model/View/newJob.jelly b/core/src/main/resources/hudson/model/View/newJob.jelly index ba6ae05161..c37a22c836 100644 --- a/core/src/main/resources/hudson/model/View/newJob.jelly +++ b/core/src/main/resources/hudson/model/View/newJob.jelly @@ -22,20 +22,54 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> - - - + + + + + + - - - - +