#Jenkins Query Params
JenkinsBaseURL: "https://jenkins.yourco.com"
JenkinsJobName: "<YOUR JOB NAME>"
JenkinsMultibranchPipelineBranchName: "master"
JenkinsBuildQuery: "(builds[?artifacts[?contains(fileName, '{{ArtifactDesiredVersion}}') == `true`]])[0]" # Partial artifact file name - this assumes your file names are unique per build
JenkinsBuild: "{{ (jenkins.content | from_json) | json_query(JenkinsBuildQuery) }}"
JenkinsBuildArtifactsURL: "{{JenkinsBuild.url}}artifact/"
BuildsDownloaded: false
ArtifactQuery: "(artifacts[?contains(fileName, 'zip') == `true`])[0].fileName"
ArtifactFileName: "{{ (JenkinsBuild) | to_json | from_json | json_query(ArtifactQuery) }}"
ArtifactRemotePath: "{{JenkinsBuildArtifactsURL}}/{{ArtifactFileName}}"
ArtifactLocalPath: "{{BuildTempDirectory}}\\{{ArtifactFileName}}"
BuildTempDirectory: "C:\\deploy"
jenkins_usernane: "jenkins"
jenkins_password: "jenkins"
- name: Find selected Build
win_uri:
url: "{{JenkinsBaseURL}}/job/{{JenkinsJobName}}/job/{{JenkinsMultibranchPipelineBranchName}}/api/json?depth=2"
force_basic_auth: yes
user: '{{jenkins_username}}'
password: '{{jenkins_password}}'
return_content: yes
register: jenkins
- name: print URLs
debug:
msg:
- "{{ArtifactRemotePath}}"
- name: Create temporary build directory
win_file:
state: directory
path: "{{BuildTempDirectory}}"
- name: Stage Application Files from Jenkins
win_get_url:
url: "{{buildToDeploy.RemotePath}}"
force: no
force_basic_auth: yes
url_username: '{{jenkins_username}}'
url_password: '{{jenkins_password}}'
dest: "{{buildToDeploy.LocalPath}}"
register: downloaded
loop:
- RemotePath: "{{ArtifactRemotePath}}"
LocalPath: "{{ArtifactLocalPath}}"
loop_control:
loop_var: buildToDeploy
This was very useful but I found that jenkins returned sparse data that could cause issues dependent on the version of ansible/jmsepath. To this I include
builds[?description != None && contains(description,'{{ searchstr }}') ......
otherwise JMSE would throw errors depending on the quality of the jenkins job data.