Open ed-holland opened 4 years ago
Our current process is as follows (without AbapGit) and is mainly manual:
If you are interested to discuss this further, we can do it here or via other channels.
I think it's fine discussing it in the open as others may join in.
Regarding the process you listed I have a few questions:
Regardless of the details I think your options are as follows:
Which basically is the same range as always between "Do it yourself the way you want it without support and with lots of work" and "Use the existing tested proprietary thing with vendor support that mostly does what you want with maybe less work".
I would like to write down some options for abapGit, just need to focus some time, right now I'm deep into some abaplint stuff
need more spare time
To the Questions:
In General, i'm referring to classical TMS/CTS (no Charm/Projects if i can avoid it).
The problem with using solutions from SAP is that the new one's require high releases to work from (Central ATC 750, gCTS 1909). Solman is dreadfull to setup and maintain (we have joint development in this area with SAP). Transporting from these newer releases back to 700 is problematic. For this reason #2 and #3 is not good for us.
I was not aware of ActiveControl. Any expeciances here?
My preference would be #1 as a lot of good things are already available.
Ah okay, we are talking about classic tasks then (I've never seen them called change request before).
I have no experience with ActiveControl, only know about it because of an Inside Track.
If you want to do 1., as you said the tools are already available. The endeavor is to link it all together in a way that is intuitive for developers (and comprehensible for internal and external IT audits). I kind of stopped there because my team was reduced from 2 people to just me, which reduces the complexity by several magnitudes. I am still using GitLab with branches per transport and merge requests with automatic CI (abaplint + ABAP Unit using sapcli) and nightly CI runs on QAS systems (abaplint + ABAP Unit + ATC). Though the link between TMS and GitLab is still manual (branch needs to be manually named with the transport number for CI to recognize it and in abapGit you need to manually only stage the objects that are included in the transport; also the assumption is that you release the transport after merging the merge request and transport it to QAS as the master branch will assume that the QAS system already has all the changes that were merged into master).
That is already a great start... lately abap teams don't tend to be big any how but that allows us to "Keep it Simple". The central start point should be AbapGit as we have more control here.
What about these changes to remove some manual activities:
Some enforcements to avoid problems should be enabled (how?):
@flaiker could you share your pipelines with us?
@flaiker could you share your pipelines with us?
Sure (probably tomorrow).
In my concept I had the following assumptions (also see #1):
I create the transport first in ADT as I am doing the first change and then later create the branch in abapGit and commit, instead of the other way around. I would probably still do this if abapGit had some kind of workflow for it, partly because refreshing the main repo I work on in abapGit takes ~30 seconds.
Looks like we are quite close in the way of process.
- feature branch = state of master + changes in a transport What is the use of the feature branch?
What i did not mention is the releases that we create. They are currently done via CTS (automated) but i would like to move the process to AbapGit/Pipeline. They would become tagged Branches.
The feature branch is the branch created for a transport to be able to do code review and CI in GitLab using merge requests.
Yes, releases is something I wanted to do too but haven't had the time for (create a release using tags in GitLab of the current state in master, this triggers the CI pipeline for tags, this calls a webservice on the QAS system to generate a TOC of the whole package, TOC is returned by the webservice and attached to the release in GitLab and published on an artifact server). This is not a must have thing for me as the target production system is in the same transport route (after QAS) in an inhouse development scenario but would be nice for external use cases or sandboxes.
This is the pipeline for a nightly build triggered by cron in GitLab (the trigger stage is just for user docs generated by GitLab pages to be run independent of the build pipeline):
Pipeline for normal, non-nightly, master-builds (any build steps using the ABAP system are turned off as there is a delay between releasing a merge request and importing the transport into QAS):
Pipeline for merge requests:
Status on the merge request (parsed junit output of abaplint and sapcli):
I can also share the .gitlab-ci.yml files but will have to anonymize them quite a lot.
There are some caveats I ran into designing these pipelines:
jq
). In the repos themselves there is another abaplint configuration just containing the repository specific rule exceptions, which are also merged with the merged base file to generate the final config file used in the build step.abaplint exceptions: I'm trying to add configuration options so exemptions style things are not needed, but it is difficult and will always be work in progress
@flaiker I don't remember, do you do product development on a SAP system, or ongoing changes to a productive system running business processes? Or release/milestone based?
I have an unusual mixed scenario: Normal three system customer landscape with ongoing changes to the software used in production but this software is developed as an add-on and supposed to be deliverable to external parties. No milestones or release cycles.
Edit: not using the AAK
Switching the conversation here to not confuse Lars to much. Hope you have time to discuss this topic to come to a working solution.
There will be no 100% solution i agree with that. I'm still new with AbapGit/AbapLint but have 25+ years in the Abap world. Still i would like to streamline our process for Abap Development. Currently we have no real history of what was done for what issue. Also our Abap developer team is small (4 devs) which should make things easier. What makes thing more complicated for us is the need to support older SAP release. We are basing our transports on 700 but they support up to 1909.
To avoid changing SAP owned code, one can only move control to a higher level (like AbapGit). Additionally, the few Badi's can be utilized. AbapGit is currently to more Tool than process (as far as i could figure out so far).
My current setup is very similar to what you have in your picture (GitLab-CE, AbapGit, AbapLint, AbapLint Abap-Backend).
If you are interested to discuss this further, we can do it here or via other channels. my company email is ed.wenmakers@redwood.com (also Teams). German is also no issue if it is easier for you.