Jenkins RESTful API是否可以从管道运行内部本地访问?

9fkzdhlc  于 2023-08-03  发布在  Jenkins
关注(0)|答案(1)|浏览(94)

我知道有一个 * 远程 * 访问API:https://www.jenkins.io/doc/book/using/remote-access-api/
但是这个API可以通过本地主机访问吗?我说未经验证是因为它将从管道运行内部被命中,因此不需要auth。
我尝试在管道运行中执行curl -v http://localhost:8080/api,得到了connect to 127.0.0.1 port 8080 failed: Connection refused
我已经使用了Jenkins的函数,比如currentBuild.getBuildCauses()等,但我更愿意让我的部署脚本询问API来获取这类信息。
有没有可能为Jenkins rest API提供一个本地的、经过身份验证的端点(这样我就不需要密钥或用户来访问它)?

y3bcpkx1

y3bcpkx11#

简短回答:你不能在没有授权信息的情况下对jenkins执行操作here
长回答:
mb一些插件有这个功能(我还没有看到它)
要为jenkins端点使用curl,您需要像这样使用username:API或username/password令牌
第一个月
Jenkins文件

withCredentials([usernamePassword(credentialsId: 'api-jenkins-creds', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
  sh 'curl https://$USERNAME:$PASSWORD@<jenkins-server>/'
}

字符串
在Jenkins中,您可以创建用户名和密码。将此数据存储在jenkins用户密码凭据中,然后在管道withCreds()中使用

import hudson.model.*
import jenkins.model.*
import jenkins.security.*
import jenkins.security.apitoken.*
import hudson.security.HudsonPrivateSecurityRealm
import hudson.security.*
def instance = Jenkins.getInstance()
def backupSecurityRealm = instance.getSecurityRealm()
def hudsonRealm = new HudsonPrivateSecurityRealm(false)
hudsonRealm.createAccount ('api-user-jenkins','api-user-jenkins-password')
instance.setSecurityRealm(hudsonRealm)
instance.save()


如果需要创建令牌

def user = User.get('api-user-jenkins'\, false)
def apiTokenProperty = user.getProperty(ApiTokenProperty.class)
def result = apiTokenProperty.tokenStore.addFixedNewToken('apitoken'\, '111fbe861ca0d321d3cc1111f17231ec9f')
user.save()
instance.setSecurityRealm(backupSecurityRealm)
instance.save()


脚本可能因授权插件而不同
在github上有很多例子
https://gist.github.com/wiz4host/17ab33e96f53d8e30389827fbf79852ehttps://gist.github.com/hayderimran7/50cb1244cc1e856873a4

相关问题