当前位置: 首页 > 面试题库 >

在Jenkins上使用Groovy配置Amazon-ecs从属插件

裴畅
2023-03-14
问题内容

我正在尝试使用init.groovy脚本为Jenkins配置amazon-ecs-plugin
,但找不到它并对其进行文档化。我是基于groovy的配置自动化的新手

尝试使用获取所有属性

import jenkins.model.*
import com.cloudbees.jenkins.plugins.amazonecs.*
ECSCloud.metaClass.properties.each {println it.name+":\t"+it.type }

输出:

regionName:           class java.lang.String
searchName:           class java.lang.String
slaveTimoutInSeconds: int
searchIndex:          interface hudson.search.SearchIndex
ACL:                  class hudson.security.ACL
descriptor:           class hudson.model.Descriptor
credentialsId:        class java.lang.String
search:               class hudson.search.Search
ecsService:           class com.cloudbees.jenkins.plugins.amazonecs.ECSService
class:                class java.lang.Class
searchUrl:            class java.lang.String
tunnel:               class java.lang.String
templates:            interface java.util.List
cluster:              class java.lang.String
jenkinsUrl:           class java.lang.String
amazonECSClient:      class com.amazonaws.services.ecs.AmazonECSClient
displayName:          class java.lang.String

但是,不确定如何继续处理子类 ecsService: class com.cloudbees.jenkins.plugins.amazonecs.ECSService

不确定如何定义该属性

def ecs-cloud = new ECSCloud(
  regionName="String"
  ecsService="<NOT SURE HOT TO CONFIGURE THIS>"
......
)

.xml手动配置后的文件看起来像

<clouds>
    <com.cloudbees.jenkins.plugins.amazonecs.ECSCloud plugin="scalable-amazon-ecs@1.0">
      <name>ECS-CLUSTER-NAME</name>
      <templates>
        <com.cloudbees.jenkins.plugins.amazonecs.ECSTaskTemplate>
          <label>jnlp-slave</label>
          <image>jenkinsci/jnlp-slave</image>
          <remoteFSRoot>/home/jenkins</remoteFSRoot>
          <memory>800</memory>
          <cpu>800</cpu>
          <privileged>false</privileged>
          <taskDefinitionArn>TASK-DEF-ARN</taskDefinitionArn>
        </com.cloudbees.jenkins.plugins.amazonecs.ECSTaskTemplate>
      </templates>
      <credentialsId></credentialsId>
      <cluster>arn:aws:ecs:REGION:ACCOUNTID:cluster/ECS-CLUSTER-NAME</cluster>
      <regionName>REGION</regionName>
      <tunnel></tunnel>
      <jenkinsUrl>JENKINS-URL</jenkinsUrl>
      <slaveTimoutInSeconds>900</slaveTimoutInSeconds>
      <ecsService>
        <credentialsId></credentialsId>
        <regionName>REGION</regionName>
      </ecsService>
    </com.cloudbees.jenkins.plugins.amazonecs.ECSCloud>
  </clouds>

提前致谢。


问题答案:

所以我在这方面取得了一些进展。它不是幂等的,但是可以。该代码是针对我的用例量身定制的,但对于您而言,自己进行调整也不应该太难。

import java.util.Arrays
import java.util.logging.Logger
Logger logger = Logger.getLogger("ecs-cluster")

logger.info("Loading Jenkins")
import jenkins.model.*
instance = Jenkins.getInstance()

import com.cloudbees.jenkins.plugins.amazonecs.ECSTaskTemplate.MountPointEntry
def mounts = Arrays.asList(
  new MountPointEntry(
    name="docker",
    sourcePath="/var/run/docker.sock",
    containerPath="/var/run/docker.sock",
    readOnly=false),
  new MountPointEntry(
    name="jenkins",
    sourcePath="/home/jenkins",
    containerPath="/home/jenkins",
    readOnly=false),
)

logger.info("Creating template")
import com.cloudbees.jenkins.plugins.amazonecs.ECSTaskTemplate
def ecsTemplate = new ECSTaskTemplate(
  templateName="jnlp-slave-with-docker",
  label="ecs-with-docker",
  image="jnlp-slave-with-docker:latest",
  remoteFSRoot=null,
  memory=2048,
  cpu=512,
  privileged=false,
  logDriverOptions=null,
  environments=null,
  extraHosts=null,
  mountPoints=mounts
)

logger.info("Retrieving ecs cloud config by descriptor")
import com.cloudbees.jenkins.plugins.amazonecs.ECSCloud
ecsCloud = new ECSCloud(
  name="name",
  templates=Arrays.asList(ecsTemplate),
  credentialsId=null,
  cluster="arn:aws:ecs:us-east-1:123456789:cluster/ecs-jenkins-slave",
  regionName="us-east-1",
  jenkinsUrl="https://my-jenkins.com",
  slaveTimoutInSeconds=60
)

logger.info("Gettings clouds")
def clouds = instance.clouds
clouds.add(ecsCloud)
logger.info("Saving jenkins")
instance.save()


 类似资料:
  • 问题内容: 我正在通过Groovy配置Active Directory。我能够通过UI通过活动目录进行身份验证,这意味着端口和身份验证不是问题。我有以下基于LDAP插件的内容: 这是错误: 对这个错误有任何见解吗? 更新 新密码 新错误 问题答案: 因此,有了建议中的所有新增功能, 尝试: adrealm =新的ActiveDirectorySecurityRealm(域,站点,bindName,

  • 问题内容: 我正在尝试通过Groovy配置Jenkins EC2-Plugin。插件代码:https : //github.com/jenkinsci/ec2-plugin 我正在尝试使用一个名称来设置云以开始 有任何想法吗? 这些是错误消息 要么 问题答案: 您对的调用与任何构造函数都不匹配:https : //github.com/jenkinsci/ec2-plugin/blob/maste

  • 我想在詹金斯中强制执行以下场景: 我有工作A和工作B 我想在执行作业B时禁用作业A,在执行作业B后,我想再次启用作业A。 为了启用/禁用作业A,我使用了Groovy插件:Groovy插件 Groovy插件提供了两种可能性:执行Groovy脚本和执行系统Groovy脚本。 在开始执行作业B时,我添加了以下代码片段: 执行工作B后: 当我运行作业B时,它失败了,出现以下异常: 当我运行作业B时,它失败

  • 问题内容: 我可以在配置Jenkins以使用yslow方面获得帮助吗? 我在yslow的闪电演讲中看到,可以使用CI来实现它,但是它并没有提供太多有关如何执行此操作的信息。我在google上搜索了yslow和CI或jenkins,已经做了很多工作,却找不到任何东西。 有人能指出我正确的方向吗? 问题答案: 抱歉,似乎有人为PahntomJS Wiki页面破坏了YSlow,但又 回来了,请在以下位置

  • 我有SonarQube和Jenkins dockerized(它们在不同的容器上运行);sonar在localhost:9000上运行,Jenkins在localhost:8080上运行。我在Jenkins上配置了Sonar凭据(使用acces令牌),但在运行SonarScanner时,我在Jenkins上得到了SonarScaner的以下错误: 我如何解决这个问题,或者使两个容器彼此通信?

  • 问题内容: 随着我越来越多地将Groovy与Jenkins Workflow插件配合使用,我开始意识到可以在多个脚本中使用的可重用代码。 共享此代码的最佳方法是什么?是否可以使用共享代码生成我自己的.jar并在Workflow脚本中利用它?还是有更简单的方法? 问题答案: 我实际上通过使用我们自己的git repo最终完成了这项工作,但在工作流库/ src中放置了一个符号链接以指向该repo。